{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "nbgrader": { "grade": false, "grade_id": "cell-e894ec2378fa46eb", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "outputs": [], "source": [ "# You must run this cell, but you can ignore its contents.\n", "\n", "import hashlib\n", "\n", "def ads_hash(ty):\n", " \"\"\"Return a unique string for input\"\"\"\n", " ty_str = str(ty).encode()\n", " m = hashlib.sha256()\n", " m.update(ty_str)\n", " return m.hexdigest()[:10]" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "nbgrader": { "grade": false, "grade_id": "cell-ada87b3b188b2d39", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "outputs": [], "source": [ "# You must also run this cell.\n", "\n", "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": { "nbgrader": { "grade": false, "grade_id": "cell-d7462f8b0f718bef", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "# Exercise - Optimization first steps\n", "\n", "We are going to take our first steps towards optimization by returning to a bumblebee example.\n", "\n", "We are going to define the positions of a flower and the flight path of a bumblebee." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "nbgrader": { "grade": false, "grade_id": "cell-78cb75cddd4fc5ef", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "outputs": [], "source": [ "flower = np.array([7.5, 10.3])" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "nbgrader": { "grade": false, "grade_id": "cell-ab9736432799913b", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "outputs": [], "source": [ "def make_bee_track(t):\n", " pos0 = (-10,3)\n", " velocity = (4.0, 0.2)\n", " pos_x = pos0[0] + t*velocity[0]\n", " pos_y = pos0[1] + t*velocity[1]\n", " return np.array([pos_x,pos_y])\n", "\n", "t = np.linspace(0,15,20)\n", "bee_track = make_bee_track(t)" ] }, { "cell_type": "markdown", "metadata": { "nbgrader": { "grade": false, "grade_id": "cell-08928dcd585933a7", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "Here we plot these positions." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "nbgrader": { "grade": false, "grade_id": "cell-4b58d56276437c3a", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAisAAAGdCAYAAADT1TPdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAApN0lEQVR4nO3dfXRU5YHH8d8wwJBAMghIXkyMoQQqRaTEmoYKiSJxgVo4qAcXV2HlCFUCZnEPltJdoxUiVqlYioUji9hVcFdR2S11yW5JgPKygUKJ4HHBBkgwMVXZJASYkMmzf2RzS8gLE8hknpDv55w5MvfezDx5Djpf79u4jDFGAAAAluoW6gEAAAC0hlgBAABWI1YAAIDViBUAAGA1YgUAAFiNWAEAAFYjVgAAgNWIFQAAYLXuoR7A1aqrq9Pnn3+uiIgIuVyuUA8HAAAEwBijqqoqxcbGqlu31veddPpY+fzzzxUfHx/qYQAAgCtQXFysuLi4Vrfp9LESEREhqf6XjYyMDPFoAABAICorKxUfH+98jrem08dKw6GfyMhIYgUAgE4mkFM4OMEWAABYjVgBAABWC2qsvPbaaxoxYoRziCY1NVW//e1vnfXGGGVnZys2NlZhYWFKT0/X4cOHgzkkAADQyQT1nJW4uDi98MILGjx4sCRp/fr1mjx5sg4cOKBvfetbevHFF7V8+XK98cYbGjJkiJ5//nmNHz9en376aUAn3AAA0FbGGNXW1srv94d6KNc0t9ut7t27t8ttRVzGGNMOYwpYv3799LOf/UyPPvqoYmNjlZWVpaefflqS5PP5FBUVpWXLlmnOnDkBvV5lZaW8Xq8qKio4wRYA0KqamhqVlpbq7NmzoR5KlxAeHq6YmBj17Nmzybq2fH532NVAfr9f//qv/6rq6mqlpqaqqKhIZWVlysjIcLbxeDxKS0vTrl27WowVn88nn8/nPK+srAz62AEAnV9dXZ2KiorkdrsVGxurnj17cjPRIDHGqKamRn/+859VVFSkpKSky974rTVBj5XCwkKlpqbq/Pnz6tOnj95//30NGzZMu3btkiRFRUU12j4qKkonTpxo8fVycnL07LPPBnXMAIBrT01Njerq6hQfH6/w8PBQD+eaFxYWph49eujEiROqqalRr169rvi1gn410NChQ3Xw4EHt2bNHjz/+uGbMmKEjR4446y+tWmNMq6W7aNEiVVRUOI/i4uKgjR0AcO25mv/DR9u011wHfc9Kz549nRNsb7vtNhUUFGjFihXOeSplZWWKiYlxti8vL2+yt+ViHo9HHo8nuIMGAADW6PC8NMbI5/MpMTFR0dHRys3NddbV1NQoPz9fo0eP7uhhAQAASwU1Vn784x9rx44dOn78uAoLC7V48WLl5eXpoYceksvlUlZWlpYuXar3339fH3/8sWbOnKnw8HBNnz49mMMCAODq+P1SXp60YUP9P4N8GbQxRrNnz1a/fv3kcrnUt29fZWVlBfU9bRLUw0BffPGFHn74YZWWlsrr9WrEiBH66KOPNH78eEnSwoULde7cOT3xxBM6ffq0UlJStHXrVu6xAgCw16ZN0pNPSiUlf1kWFyetWCFNnRqUt/zoo4/0xhtvKC8vT4MGDdL9998flPexVVBjZe3ata2ud7lcys7OVnZ2djCHAQBA+9i0Sbr/funSW5SdOlW//N13gxIsn332mWJiYpzTJLp3t+t7iC9cuKAePXoE7fU5JRoAgED4/fV7VJq7l2rDsqysdj8kNHPmTM2bN08nT56Uy+XSTTfd1GSb06dP65FHHtF1112n8PBwTZgwQUePHv3/oRldf/31eu+995ztR44cqYEDBzrPd+/erR49eujMmTOSpIqKCs2ePVsDBw5UZGSk7rrrLv3xj390ts/OztbIkSP1T//0Txo0aJA8Ho+CeY9ZYgUAgEDs2NH40M+ljJGKi+u3a0crVqzQc889p7i4OJWWlqqgoKDJNjNnztS+ffu0efNm7d69W8YYTZw4URcuXJDL5dLYsWOVl5cnqT5sjhw5ogsXLji3EsnLy1NycrL69OkjY4wmTZqksrIybdmyRfv379eoUaM0btw4ff311857Hjt2TP/yL/+i9957TwcPHmzX3/lSdu1HAgDAVqWl7btdgLxeryIiIuR2uxUdHd1k/dGjR7V582b9/ve/dw4TvfXWW4qPj9cHH3ygBx54QOnp6VqzZo0kafv27br11lt14403Ki8vT8OGDVNeXp7S09MlSdu2bVNhYaHKy8udW4W89NJL+uCDD/Tuu+9q9uzZkuqv4P31r3+t66+/vl1/3+awZwUAgEBcdE+wdtmunXzyySfq3r27UlJSnGX9+/fX0KFD9cknn0iS0tPTdfjwYX355ZfKz89Xenq60tPTlZ+fr9raWu3atUtpaWmSpP379+vMmTPq37+/+vTp4zyKior02WefOe+RkJDQIaEisWcFAIDAjBlTf9XPqVPNn7fictWvHzOmQ4fV0rkiF98Rfvjw4erfv7/y8/OVn5+v5557TvHx8VqyZIkKCgp07tw53XHHHZLqv0MpJibGOWx0sb59+zp/7t27d7v/Li0hVgAACITbXX958v3314fJxZHQ8DUxr7xSv10HGjZsmGpra7V3717nMNBXX32l//mf/9HNN9/8/8OrP2/lww8/1Mcff6wxY8YoIiJCFy5c0K9+9SuNGjXKuW3IqFGjVFZWpu7duzd7Mm8ocBgIAIBATZ1af3nyDTc0Xh4XF7TLli8nKSlJkydP1mOPPaadO3fqj3/8o/7mb/5GN9xwgyZPnuxsl56errffflsjRoxQZGSkEzBvvfWWc76KJN19991KTU3VlClT9B//8R86fvy4du3apZ/85Cfat29fh/9+ErECAEDbTJ0qHT8ubdsmvf12/T+LikISKg3WrVun5ORkff/731dqaqqMMdqyZUuje5/ceeed8vv9jcIkLS1Nfr/fOV9Fqt8Ls2XLFo0dO1aPPvqohgwZogcffFDHjx9v9bv7gsllgnlhdAeorKyU1+tVRUWFIiMjQz0cAIClzp8/r6KiIiUmJqpXr16hHk6X0Nqct+Xzmz0rAADAasQKAACwGrECAACsRqwAAACrESsAAMBqxAoAALAasQIAAKxGrAAAAKsRKwAAWC49PV1ZWVmhHkbIECsAAMBqxAoAALAasQIAwBUoKSnRtm3bVFJS0iHvV1tbq8zMTPXt21f9+/fXT37yEzV8vV9NTY0WLlyoG264Qb1791ZKSory8vIa/fyuXbs0duxYhYWFKT4+XvPnz1d1dXWHjP1qESsAgC7LGKPq6uo2P1atWqWEhATdddddSkhI0KpVq9r081fyHcLr169X9+7dtXfvXr366qv6+c9/rtdff12S9Ld/+7f6/e9/r40bN+rQoUN64IEH9Fd/9Vc6evSoJKmwsFD33HOPpk6dqkOHDumdd97Rzp07lZmZ2a7zGSx86zIAoEto7huAq6ur1adPnw4fy5kzZ9S7d++At09PT1d5ebkOHz4sl8slSfrRj36kzZs369/+7d+UlJSkkpISxcbGOj9z99136/bbb9fSpUv1yCOPKCwsTKtXr3bW79y5U2lpaaqurg7at1C317cudw/K6AAAQLv67ne/64SKJKWmpurll1/Wvn37ZIzRkCFDGm3v8/nUv39/SdL+/ft17NgxvfXWW856Y4zq6upUVFSkm2++uWN+iStErAAAuqzw8HCdOXOmTT9z6tQp3Xzzzaqrq3OWud1uHTlyRDfccEPA79ue3G639u/fL7fb3Wh5w16juro6zZkzR/Pnz2/yszfeeGO7jiUYiBUAQJflcrnadDhGkoYMGaI1a9Zozpw58vv9crvdWr16dZM9G+1tz549TZ4nJSXp29/+tvx+v8rLyzVmzJhmf3bUqFE6fPiwBg8eHNQxBgsn2AIA0EazZs3S8ePHtW3bNh0/flyzZs0K+nsWFxdrwYIF+vTTT7Vhwwb94he/0JNPPqkhQ4booYce0iOPPKJNmzapqKhIBQUFWrZsmbZs2SJJevrpp7V7927NnTtXBw8e1NGjR7V582bNmzcv6ONuD+xZAQDgCsTFxSkuLq7D3u+RRx7RuXPndPvtt8vtdmvevHmaPXu2JGndunV6/vnn9dRTT+nUqVPq37+/UlNTNXHiREnSiBEjlJ+fr8WLF2vMmDEyxugb3/iGpk2b1mHjvxpcDQQA6BJauzIFwdFeVwNxGAgAAFiNWAEAAFYjVgAAgNWIFQAAYDViBQAAWI1YAQB0KZ38IthOpb3mmlgBAHQJPXr0kCSdPXs2xCPpOhrmumHurxQ3hQMAdAlut1t9+/ZVeXm5pPrv57n4iwHRfowxOnv2rMrLy9W3b98m31nUVsQKAKDLiI6OliQnWBBcffv2deb8ahArAIAuw+VyKSYmRgMHDtSFCxdCPZxrWo8ePa56j0oDYgUA0OW43e52+yBF8HGCLQAAsBqxAgAArEasAAAAqxErAADAasQKAACwGrECAACsRqwAAACrESsAAMBqxAoAALAasQIAAKxGrAAAAKsRKwAAwGrECgAAsBqxAgAArEasAAAAqxErAADAasQKAACwGrECAACsRqwAAACrESsAAMBqxAoAALAasQIAAKxGrAAAAKsRKwAAwGpBjZWcnBx95zvfUUREhAYOHKgpU6bo008/bbSNMUbZ2dmKjY1VWFiY0tPTdfjw4WAOCwAAdCJBjZX8/HzNnTtXe/bsUW5urmpra5WRkaHq6mpnmxdffFHLly/XypUrVVBQoOjoaI0fP15VVVXBHBoAAOgkXMYY01Fv9uc//1kDBw5Ufn6+xo4dK2OMYmNjlZWVpaefflqS5PP5FBUVpWXLlmnOnDmXfc3Kykp5vV5VVFQoMjIy2L8CAABoB235/O7Qc1YqKiokSf369ZMkFRUVqaysTBkZGc42Ho9HaWlp2rVrV7Ov4fP5VFlZ2egBAACuXR0WK8YYLViwQHfccYeGDx8uSSorK5MkRUVFNdo2KirKWXepnJwceb1e5xEfHx/cgQMAgJDqsFjJzMzUoUOHtGHDhibrXC5Xo+fGmCbLGixatEgVFRXOo7i4OCjjBQAAdujeEW8yb948bd68Wdu3b1dcXJyzPDo6WlL9HpaYmBhneXl5eZO9LQ08Ho88Hk9wBwwAAKwR1D0rxhhlZmZq06ZN+t3vfqfExMRG6xMTExUdHa3c3FxnWU1NjfLz8zV69OhgDg0AAHQSQd2zMnfuXL399tv68MMPFRER4ZyH4vV6FRYWJpfLpaysLC1dulRJSUlKSkrS0qVLFR4erunTpwdzaAAAoJMIaqy89tprkqT09PRGy9etW6eZM2dKkhYuXKhz587piSee0OnTp5WSkqKtW7cqIiIimEMDAACdRIfeZyUYuM8KAACdj7X3WQEAAGgrYgUAAFiNWAEAAFYjVgAAgNWIFQAAYDViBQAAWI1YAQAAViNWAACA1YgVAABgNWIFAABYjVgBAABWI1YAAIDViBUAAGA1YgUAAFiNWAEAAFYjVgAAgNWIFQAAYDViBQAAWI1YAQAAViNWAACA1YgVAABgNWIFAABYjVgBAABWI1YAAIDViBUAAGA1YgUAAFiNWAEAAFYjVgAAgNWIFQAAYDViBQAAWI1YAQAAViNWAACA1YgVAABgNWIFAABYjVgBAABWI1YAAIDViBUAAGA1YgUAAFiNWAEAAFYjVgAAgNWIFQAAYDViBQAAWI1YAQAAViNWAACA1YgVAABgNWIFAABYjVgBAABWI1YAAIDViBUAAGA1YgUAAFiNWAEAAFYjVgAAgNWIFQAAYDViBQAAWI1YAQAAViNWAACA1YgVAABgNWIFAABYjVgBAABWI1YAAIDViBUAAGC17qEeAGA9v1/asUMqLZViYqQxYyS3O9SjAoAug1gBWrNpk/Tkk1JJyV+WxcVJK1ZIU6eGblwA0IVwGAhoyaZN0v33Nw4VSTp1qn75pk2hGRcAdDFBjZXt27fr3nvvVWxsrFwulz744ING640xys7OVmxsrMLCwpSenq7Dhw8Hc0hAYPz++j0qxjRd17AsK6t+OwBAUAU1Vqqrq3Xrrbdq5cqVza5/8cUXtXz5cq1cuVIFBQWKjo7W+PHjVVVVFcxhAZe3Y0fTPSoXM0YqLq7fDgAQVEE9Z2XChAmaMGFCs+uMMXrllVe0ePFiTf3/Y//r169XVFSU3n77bc2ZMyeYQwNaV1ravtsBAK5YyM5ZKSoqUllZmTIyMpxlHo9HaWlp2rVrV4s/5/P5VFlZ2egBtLuYmPbdDgBwxUIWK2VlZZKkqKioRsujoqKcdc3JycmR1+t1HvHx8UEdJ7qoMWPqr/pxuZpf73JJ8fH12wEAgirkVwO5LvkwMMY0WXaxRYsWqaKiwnkUFxcHe4joitzu+suTpabB0vD8lVe43woAdICQxUp0dLQkNdmLUl5e3mRvy8U8Ho8iIyMbPYCgmDpVevdd6YYbGi+Pi6tfzn1WAKBDhCxWEhMTFR0drdzcXGdZTU2N8vPzNXr06FANC2hs6lTp+HFp2zbp7bfr/1lURKgAQAcK6tVAZ86c0bFjx5znRUVFOnjwoPr166cbb7xRWVlZWrp0qZKSkpSUlKSlS5cqPDxc06dPD+awgLZxu6X09FCPAgC6rKDGyr59+3TnnXc6zxcsWCBJmjFjht544w0tXLhQ586d0xNPPKHTp08rJSVFW7duVURERDCHBQAAOhGXMc3dorPzqKyslNfrVUVFBeevAADQSbTl8zvkVwMBAAC0hlgBAABWI1YAAIDViBUAAGA1YgUAAFiNWAEAAFYjVgAAgNWIFQAAYDViBQAAWI1YAQAAViNWAACA1YgVAABgNWIFAABYjVgBAABWI1YAAIDViBUAAGA1YgUAAFiNWAEAAFYjVgAAgNWIFQAAYDViBQAAtKikpETbtm1TSUlJyMZArAAAgGatXbtWCQkJuuuuu5SQkKC1a9eGZBwuY4wJyTu3k8rKSnm9XlVUVCgyMjLUwwEAoEOVlJTo6NGjSkpKUlxcXIvbGWPk8/lUVVXlPM6cOdPo+cXLSktL9eabbzZ6DbfbrePHj7f6PoFqy+d396t+NwAA0KJAY+JSgcRFbm6u3nnnHRlj5HK5lJKSoujo6BYjpLa29qp+F7/fr2PHjrVLrLQFsQIA6NKuNCYu1RAXF4fChg0btGzZMicmpk2bpuHDh7e6Z+Pi5W2JC2OM9uzZE9C24eHh6tOnjyIiIho9Ll5mjNGrr76qiw/AuN1uDR48uM1zc7WIFQCA9dorKC5mjNHq1as1d+5c1dXVqVu3blq4cKHS0tICOkzS3PPW4sIYo40bN17RWJuLC5/Pp//+7/9usm1WVpaSk5ObDZCG5263O6D3veWWWzRnzhz5/X653W6tXr26w/eqSJyzAgBoB8GIiQZr167V7NmznaB4+eWX9YMf/CDgmGhtD4bf72/XsTYIDw+Xx+PR6dOnm6ybOHGihgwZ0uIejUuftxQXJSUlSkhIUF1dnbOsPc8pufh9jh07psGDB7fr67bl85tYAYAuoCNjYs2aNZo1a1aTcy7aEhENy7/++msdPXq0Xcd7Od/4xjcUGxvbYki0tKxheUNcdERMrF27tsmej1mzZrXLawcbsQIAcLQUE5e6OC4CDYsvvvhC7733XpPX8nq9qq6uvuoTOlvi8Xjk9XoDioiWlp05c0bf/e53O31MBGvPR7ARKwDQyVzJno9A4qK4uFjZ2dmNTpJ0uVz63ve+pwsXLrTpnIurER4e3uaYiIiI0Pnz5zV9+vSgBQUxETpcugwAQXC1h1Jaiot3331XK1ascK4YmTx5soYOHRrQHo4riQtjjHbu3NnqNoHGhd/vV05OTqMY6tatm/7rv/5LgwcPbvMJnc05c+ZM0E7ynDVrlu65556gxkRcXByRcpXYswLgmtHe52VcHBdr167V4sWLVVdXJ5fLpTlz5uj2229v84mdHb3nwu1269///d+bxMTPf/5zJSQkNBshbY0L9k7gSnAYCICVOvIkzyVLlmjixIlOLFRWVjrx0Nyy9txzEYiGuHC73fr888+brL/vvvs0bNiwgA6VXC4uiAnYiFgBcEU6+oqRRx99tMlNtK7kEtTTp0+rtLS0XccbiJSUlCZ7JwI5dHJxXHT2y0+BK0WsAGizQK4Yae4OnYGERXl5uT766KMm7+l2u4N2nwtJ6tu3r/r373/FV4s0/Pl///d/NWjQoE59kidgG2IFuIa1Ze/H5e5z0fC8pKREL730ki79z8HIkSOdK0Y66rDI5W6Q1dzzs2fPavLkyZ36ElT2fKCrIVaAELqaQynNfXHZxVGxZcsWrV+/3rlqJC0tTfHx8a2GSCji4tLltbW1Wrx4cZOTPPfs2aOhQ4eqd+/eV3W1iMR5GUBnQ6wArWjP8zIujYs333xTP/3pT50rRmbMmKGRI0e26TtGghkXLR3u6Natm/PNrQ0aDgUlJiYGfPvv1hATAC5GrKDTC9aJnq+//rrmzJnjnJfxD//wDxo/fnzAt/5ubnlHXYrq9/tVWFjYZLs5c+Zo5MiRV3W1iERMAOhYxAqCriOvGvnlL3+p++67r83ffnrpsoqKClVUVLTrWC/m8Xjk8/maLL/zzjs1aNCgNp3U2VxcdMRVI8QEgI5CrCCoWrtq5Eq+uOzi519++aUOHjzYob9PbGysBg4ceNmYuFxclJaW8qVlABAgYgUB7/lo7oTO1gKjtLRUb775ZpPXiYmJ0blz5zrksMiVXoJaXV2tcePGdfqYYO8HgGsBsdIJXOlhlEDiIjc31zlZ0uVyKSUlRdHR0S1GSKjjIjIy0vmzz+fTY4891iQoPvvsMyUkJFz1mIgJALADX2TYTtrjvIzm4mLjxo1atmyZExPTpk3T8OHDA77JVlviwhijPXv2BLRtIHFRV1enV199tclVIx9++KEGDx6syMhI9enT56ouRTXGNAmK9ggViS8tA4DOiD0rLVi1apXmzZvnnJcxf/58jR49us23Ae/oPRc1NTXau3dvk23/7u/+TsnJyS1GSFvigr0TAICrxWGgq1RSUqIbb7yxyd08r1Z4eLg8Ho9Onz7dZN3EiRM1ZMiQVm+sFUhc8D0jAIDOgMNAV+no0aPNhsott9yi+Pj4KzrBs+FS1JZiYvXq1e3yoR8XF6c1a9Y02fPR3kHBoQ4AQEdhz0ozgr13gsMoAICujsNA7YAvLQMAIHiIlXZCUAAAEBycs9JOOC8DAIDQ6xbqAQAAALSGWAEAAFYjVgAAgNWIFQAAYDViBQAAWI1YAQAAViNWAACA1YgVAABgNWIFAABYjVgBAABWI1YAAIDViBUAAGA1YgUAAFjNilhZtWqVEhMT1atXLyUnJ2vHjh2hHhIAALBEyGPlnXfeUVZWlhYvXqwDBw5ozJgxmjBhgk6ePBnqoQEAAAu4jDEmlANISUnRqFGj9NprrznLbr75Zk2ZMkU5OTmX/fnKykp5vV5VVFQoMjIymEMFAADtpC2f3yHds1JTU6P9+/crIyOj0fKMjAzt2rWr2Z/x+XyqrKxs9AAAANeukMbKl19+Kb/fr6ioqEbLo6KiVFZW1uzP5OTkyOv1Oo/4+PiOGCoAAAiRkJ+zIkkul6vRc2NMk2UNFi1apIqKCudRXFzcEUMEAAAh0j2Ubz5gwAC53e4me1HKy8ub7G1p4PF45PF4OmJ4AADAAiHds9KzZ08lJycrNze30fLc3FyNHj06RKMCAAA2CemeFUlasGCBHn74Yd12221KTU3VmjVrdPLkSf3whz8M9dAAAIAFQh4r06ZN01dffaXnnntOpaWlGj58uLZs2aKEhIRQDw0AAFgg5PdZuVrcZwUAgM6n09xnBQAA4HKIFQAAYDViBQAAWI1YAQAAViNWAACA1YgVAABgNWIFAABYjVgBAABWI1YAAIDViBUAAGA1YgUAAFiNWAEAAFYjVgAAgNWIFQAAYDViBQAAWI1YAQAAViNWAACA1YgVAABgNWIFAABYjVgBAABWI1YAAIDViBUAAGA1YgUAAFiNWAEAAFYjVgAAgNWIFQAAYDViBQAAWI1YAQAAViNWAACA1YgVAABgNWIFAABYjVgBAABWI1YAAIDViBUAAGA1YgUAAFiNWAEAAFYjVgAAgNWIFQAAYDViBQAAWI1YAQAAViNWAACA1YgVAABgNWIFAABYjVgBAABWI1YAAIDViBUAAGA1YgUAAFiNWAEAAFYjVgAAgNWIFQAAYDViBQAAWI1YAQAAViNWAACA1YgVAABgNWIFAABYjVgBAABWI1YAAIDViBUAAGA1YgUAAFiNWAEAAFYjVgAAgNWIFQAAYDViBQAAWI1YAQAAVgtqrCxZskSjR49WeHi4+vbt2+w2J0+e1L333qvevXtrwIABmj9/vmpqaoI5LAAA0Il0D+aL19TU6IEHHlBqaqrWrl3bZL3f79ekSZN0/fXXa+fOnfrqq680Y8YMGWP0i1/8IphDAwAAnURQY+XZZ5+VJL3xxhvNrt+6dauOHDmi4uJixcbGSpJefvllzZw5U0uWLFFkZGQwhwcAADqBkJ6zsnv3bg0fPtwJFUm655575PP5tH///hCODAAA2CKoe1Yup6ysTFFRUY2WXXfdderZs6fKysqa/Rmfzyefz+c8r6ysDOoYAQBAaLV5z0p2drZcLlerj3379gX8ei6Xq8kyY0yzyyUpJydHXq/XecTHx7f1VwAAAJ1Im/esZGZm6sEHH2x1m5tuuimg14qOjtbevXsbLTt9+rQuXLjQZI9Lg0WLFmnBggXO88rKSoIFAIBrWJtjZcCAARowYEC7vHlqaqqWLFmi0tJSxcTESKo/6dbj8Sg5ObnZn/F4PPJ4PO3y/gAAwH5BPWfl5MmT+vrrr3Xy5En5/X4dPHhQkjR48GD16dNHGRkZGjZsmB5++GH97Gc/09dff62///u/12OPPcaVQAAAQFKQY+Uf//EftX79euf5t7/9bUnStm3blJ6eLrfbrd/85jd64okn9L3vfU9hYWGaPn26XnrppWAOCwAAdCIuY4wJ9SCuRmVlpbxeryoqKtgbAwBAJ9GWz2++GwgAAFiNWAEAAFYjVgAAgNWIFQAAYDViBQAAWI1YAQAAViNWAACA1YgVAABgNWIFAABYjVgBAABWI1YAAIDViBUAAGA1YgUAAFiNWAEAAFYjVgAAgNWIFQAAYDViBQAAWI1YAQAAViNWAACA1YgVAABgNWIFAABYjVgBAABWI1YAAIDViBUAAGA1YgUAAFiNWAEAAFYjVgAAgNWIFQAAYDViBQAAWI1YAQAAViNWAACA1YgVAABgNWIFAABYjVgBAABWI1YAAIDViBUAAGA1YgUAAFiNWAEAAFYjVgAAgNWIFQAAYDViBQAAWI1YAQAAViNWAACA1YgVAABgNWIFAABYjVgBAABWI1YAAIDViBUAAGA1YgUAAFiNWAEAAFYjVgAAgNWIFQAAYLXuoR7A1TLGSJIqKytDPBIAABCohs/ths/x1nT6WKmqqpIkxcfHh3gkAACgraqqquT1elvdxmUCSRqL1dXV6fPPP1dERIRcLle7vnZlZaXi4+NVXFysyMjIdn3taw1zFTjmKnDMVeCYq8AxV20TrPkyxqiqqkqxsbHq1q31s1I6/Z6Vbt26KS4uLqjvERkZyV/oADFXgWOuAsdcBY65Chxz1TbBmK/L7VFpwAm2AADAasQKAACwGrHSCo/Ho2eeeUYejyfUQ7EecxU45ipwzFXgmKvAMVdtY8N8dfoTbAEAwLWNPSsAAMBqxAoAALAasQIAAKxGrAAAAKsRK81YsmSJRo8erfDwcPXt27fZbU6ePKl7771XvXv31oABAzR//nzV1NR07EAtsWrVKiUmJqpXr15KTk7Wjh07Qj0kK2zfvl333nuvYmNj5XK59MEHHzRab4xRdna2YmNjFRYWpvT0dB0+fDg0gw2hnJwcfec731FERIQGDhyoKVOm6NNPP220DXNV77XXXtOIESOcm3Olpqbqt7/9rbOeeWpZTk6OXC6XsrKynGXM119kZ2fL5XI1ekRHRzvrQz1XxEozampq9MADD+jxxx9vdr3f79ekSZNUXV2tnTt3auPGjXrvvff01FNPdfBIQ++dd95RVlaWFi9erAMHDmjMmDGaMGGCTp48GeqhhVx1dbVuvfVWrVy5stn1L774opYvX66VK1eqoKBA0dHRGj9+vPN9V11Ffn6+5s6dqz179ig3N1e1tbXKyMhQdXW1sw1zVS8uLk4vvPCC9u3bp3379umuu+7S5MmTnQ8N5ql5BQUFWrNmjUaMGNFoOfPV2Le+9S2VlpY6j8LCQmddyOfKoEXr1q0zXq+3yfItW7aYbt26mVOnTjnLNmzYYDwej6moqOjAEYbe7bffbn74wx82WvbNb37T/OhHPwrRiOwkybz//vvO87q6OhMdHW1eeOEFZ9n58+eN1+s1v/rVr0IwQnuUl5cbSSY/P98Yw1xdznXXXWdef/115qkFVVVVJikpyeTm5pq0tDTz5JNPGmP4e3WpZ555xtx6663NrrNhrtizcgV2796t4cOHKzY21ll2zz33yOfzaf/+/SEcWceqqanR/v37lZGR0Wh5RkaGdu3aFaJRdQ5FRUUqKytrNHcej0dpaWldfu4qKiokSf369ZPEXLXE7/dr48aNqq6uVmpqKvPUgrlz52rSpEm6++67Gy1nvpo6evSoYmNjlZiYqAcffFB/+tOfJNkxV53+iwxDoaysTFFRUY2WXXfdderZs6fKyspCNKqO9+WXX8rv9zeZi6ioqC41D1eiYX6am7sTJ06EYkhWMMZowYIFuuOOOzR8+HBJzNWlCgsLlZqaqvPnz6tPnz56//33NWzYMOdDg3n6i40bN+oPf/iDCgoKmqzj71VjKSkpevPNNzVkyBB98cUXev755zV69GgdPnzYirnqMntWmjt56NLHvn37An49l8vVZJkxptnl17pLf+euOg9XgrlrLDMzU4cOHdKGDRuarGOu6g0dOlQHDx7Unj179Pjjj2vGjBk6cuSIs555qldcXKwnn3xS//zP/6xevXq1uB3zVW/ChAm67777dMstt+juu+/Wb37zG0nS+vXrnW1COVddZs9KZmamHnzwwVa3uemmmwJ6rejoaO3du7fRstOnT+vChQtNyvNaNmDAALnd7iZ7UcrLy7vUPFyJhrPsy8rKFBMT4yzvynM3b948bd68Wdu3b1dcXJyznLlqrGfPnho8eLAk6bbbblNBQYFWrFihp59+WhLz1GD//v0qLy9XcnKys8zv92v79u1auXKlc8UZ89W83r1765ZbbtHRo0c1ZcoUSaGdqy6zZ2XAgAH65je/2eqjtfq+WGpqqj7++GOVlpY6y7Zu3SqPx9PoX4xrXc+ePZWcnKzc3NxGy3NzczV69OgQjapzSExMVHR0dKO5q6mpUX5+fpebO2OMMjMztWnTJv3ud79TYmJio/XMVeuMMfL5fMzTJcaNG6fCwkIdPHjQedx222166KGHdPDgQQ0aNIj5aoXP59Mnn3yimJgYO/5udchpvJ3MiRMnzIEDB8yzzz5r+vTpYw4cOGAOHDhgqqqqjDHG1NbWmuHDh5tx48aZP/zhD+Y///M/TVxcnMnMzAzxyDvexo0bTY8ePczatWvNkSNHTFZWlundu7c5fvx4qIcWclVVVc7fHUlm+fLl5sCBA+bEiRPGGGNeeOEF4/V6zaZNm0xhYaH567/+axMTE2MqKytDPPKO9fjjjxuv12vy8vJMaWmp8zh79qyzDXNVb9GiRWb79u2mqKjIHDp0yPz4xz823bp1M1u3bjXGME+Xc/HVQMYwXxd76qmnTF5envnTn/5k9uzZY77//e+biIgI57/loZ4rYqUZM2bMMJKaPLZt2+Zsc+LECTNp0iQTFhZm+vXrZzIzM8358+dDN+gQ+uUvf2kSEhJMz549zahRo5xLTru6bdu2Nfv3aMaMGcaY+ssBn3nmGRMdHW08Ho8ZO3asKSwsDO2gQ6C5OZJk1q1b52zDXNV79NFHnX/Xrr/+ejNu3DgnVIxhni7n0lhhvv5i2rRpJiYmxvTo0cPExsaaqVOnmsOHDzvrQz1XLmOM6Zh9OAAAAG3XZc5ZAQAAnROxAgAArEasAAAAqxErAADAasQKAACwGrECAACsRqwAAACrESsAAMBqxAoAALAasQIAAKxGrAAAAKsRKwAAwGr/B+iAqSeyZ2RqAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(nrows=1, ncols=1)\n", "ax.plot( [flower[0]], [flower[1]], 'or', label='flower' )\n", "ax.plot( bee_track[0], bee_track[1], '.-k', label='bee')\n", "ax.axis('equal')\n", "ax.legend();" ] }, { "cell_type": "markdown", "metadata": { "nbgrader": { "grade": false, "grade_id": "cell-701acd6a5b4a9581", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "## Q1 Draw a figure as above with, additionally, a blue line between each point on `bee_track` and `flower`.\n", "\n", "When complete, your figure should look like this:\n", "\n", "\n", "\n", "\n", "Hint, draw the flower first. Then, make a for loop which steps through each position of the bee. Inside the for loop, draw a line segment between the bee and the flower." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "nbgrader": { "grade": true, "grade_id": "cell-43f8774b1a82b15b", "locked": false, "points": 1, "schema_version": 3, "solution": true, "task": false } }, "outputs": [ { "data": { "image/png": "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CgrCO++8U33/999/j8GDB6OkpKTBzkJdX2dd9m2QvSMiIqJ6ddlll1UHFQBISUnBG2+8gR07dkAphc6dO9s9vry8HK1atQIA7Ny5EwcPHsQnn3xSfb9SClarFZmZmejatWvjvIk6YlghIqILVnBwMIqLi2v1nGPHjqFr166wWq3Vt5nNZuzbtw9t2rTx+nXrk9lsxs6dO2E2m+1u13qNrFYrxo0bh8cff9zpuW3btq3XfWkIDCtERHTBMplMtRqOAYDOnTtj4cKFGDduHCwWC8xmM9555x2nno36tnXrVqfrycnJ6NOnDywWC/Lz8zFo0CCXz+3bty/27t2LTp06Neg+NhQW2BIREdXSQw89hCNHjmD9+vU4cuQIHnrooQZ/zezsbEyZMgUHDhzA4sWL8c9//hNPPPEEOnfujLvvvhv33Xcfli9fjszMTGzfvh2vvPIK1qxZAwCYOnUqtmzZgokTJyI9PR0ZGRlYtWoVHnvssQbf7/rAnhUiIqI6SEhIQEJCQqO93n333YfS0lJceumlMJvNeOyxxzB27FgAwAcffICXXnoJTz75JI4dO4ZWrVohJSUFw4cPBwD06tULaWlpmD59OgYNGgSlFDp27Ig77rij0fb/fHA2EBERXRA8zUyhhlFfs4E4DERERESGxrBCREREhsawQkRERIbGsEJERESGxrBCREREhsawQkREF5RmPgm2WamvY82wQkREFwQ/Pz8AwLlz55p4Ty4c2rHWjn1dcVE4IiK6IJjNZkRGRiI/Px+AnJ/H9sSAVH+UUjh37hzy8/MRGRnpdM6i2mJYISKiC0ZsbCwAVAcWaliRkZHVx/x8MKwQEdEFw2QyIS4uDtHR0aisrGzq3flD8/PzO+8eFQ3DChERXXDMZnO9NaTU8FhgS0RERIbGsEJERESGxrBCREREhsawQkRERIbGsEJERESGxrBCREREhsawQkRERIbGsEJERESGxrBCREREhsawQkRERIbGsEJERESGxrBCREREhsawQkRERIbGsEJERESGxrBCREREhsawQkRERIbGsEJERESGxrBCREREhsawQkRERIbGsEJERESGxrBCREREhsawQkRERIbGsEJERESGxrBCREREhtagYWX27Nm45JJLEBYWhujoaNxyyy04cOCA3WOUUpgxYwbi4+MRFBSE1NRU7N27tyF3i4iIiJqR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E088oZTi58rR888/ry6++GKX9xnhWLFnpQ62bNmCHj16ID4+vvq2a6+9FuXl5di5c2cT7lnjqqiowM6dOzFs2DC724cNG4bNmzc30V41D5mZmcjLy7M7dgEBARg8ePAFf+wKCgoAAC1btgTAY+WOxWLBkiVLUFJSgpSUFB4nNyZOnIjrr78eQ4YMsbudx8tZRkYG4uPjkZSUhNGjR+Pw4cMAjHGsmv2JDJtCXl4eYmJi7G5r0aIF/P39kZeX10R71fhOnjwJi8XidCxiYmIuqONQF9rxcXXsjh492hS7ZAhKKUyZMgVXXHEFevToAYDHytGePXuQkpKCsrIyhIaGYsWKFejWrVt1o8HjpFuyZAl27dqF7du3O93Hz5W9AQMG4OOPP0bnzp3x22+/4aWXXsLAgQOxd+9eQxyrC6ZnxVXxkONlx44dXm/PZDI53aaUcnn7H53je75Qj0Nd8NjZmzRpEn7++WcsXrzY6T4eK9GlSxekp6dj69atePTRRzFmzBjs27ev+n4eJ5GdnY0nnngC//73vxEYGOj2cTxe4rrrrsPIkSPRs2dPDBkyBF999RUA4KOPPqp+TFMeqwumZ2XSpEkYPXq0x8e0b9/eq23FxsZi27ZtdredOXMGlZWVTsnzj6x169Ywm81OvSj5+fkX1HGoC63KPi8vD3FxcdW3X8jH7rHHHsOqVauwceNGJCQkVN/OY2XP398fnTp1AgD0798f27dvx5w5czB16lQAPE6anTt3Ij8/H/369au+zWKxYOPGjZg7d271jDMeL9dCQkLQs2dPZGRk4JZbbgHQtMfqgulZad26NS666CKPF0/p21ZKSgp++eUX5ObmVt/2zTffICAgwO4fxh+dv78/+vXrh7Vr19rdvnbtWgwcOLCJ9qp5SEpKQmxsrN2xq6ioQFpa2gV37JRSmDRpEpYvX47vvvsOSUlJdvfzWHmmlEJ5eTmPk4NrrrkGe/bsQXp6evWlf//+uPvuu5Geno4OHTrweHlQXl6O/fv3Iy4uzhifrUYp421mjh49qnbv3q1eeOEFFRoaqnbv3q12796tioqKlFJKVVVVqR49eqhrrrlG7dq1S3377bcqISFBTZo0qYn3vPEtWbJE+fn5qffee0/t27dPTZ48WYWEhKgjR4409a41uaKiourPDgD15ptvqt27d6ujR48qpZR6+eWXVUREhFq+fLnas2ePuvPOO1VcXJwqLCxs4j1vXI8++qiKiIhQGzZsULm5udWXc+fOVT+Gx0pMmzZNbdy4UWVmZqqff/5Z/fWvf1U+Pj7qm2++UUrxONXEdjaQUjxetp588km1YcMGdfjwYbV161Z1ww03qLCwsOrv8qY+VgwrLowZM0YBcLqsX7+++jFHjx5V119/vQoKClItW7ZUkyZNUmVlZU23001o3rx5ql27dsrf31/17du3esrphW79+vUuP0djxoxRSsl0wOeff17FxsaqgIAAdeWVV6o9e/Y07U43AVfHCID64IMPqh/DYyUefPDB6n9rUVFR6pprrqkOKkrxONXEMazweOnuuOMOFRcXp/z8/FR8fLwaMWKE2rt3b/X9TX2sTEop1Th9OERERES1d8HUrBAREVHzxLBCREREhsawQkRERIbGsEJERESGxrBCREREhsawQkRERIbGsEJERESGxrBCREREhsawQkRERIbGsEJERESGxrBCREREhsawQkRERIb2/wFogiuxGNHIKwAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Your code here. Check it is correct by comparing your figure with the above.\n", "fig, ax = plt.subplots(nrows=1, ncols=1)\n", "ax.plot( [flower[0]], [flower[1]], 'or', label='flower' )\n", "ax.plot( bee_track[0], bee_track[1], '.-k', label='bee')\n", "for i in range(bee_track.shape[1]):\n", " bee_pos = bee_track[:,i]\n", " ax.plot( [flower[0], bee_pos[0]], [flower[1], bee_pos[1]], 'b-' )\n", "ax.axis('equal')\n", "ax.legend();" ] }, { "cell_type": "markdown", "metadata": { "nbgrader": { "grade": false, "grade_id": "cell-45a057824a59090e", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "## Q2 write a function called `my_distance` which takes two arguments, each of which is a length 2 sequence of `x`, `y` position and returns the Euclidean distance between these points." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "nbgrader": { "grade": false, "grade_id": "cell-9d86e35ff582bf8f", "locked": false, "schema_version": 3, "solution": true, "task": false } }, "outputs": [], "source": [ "def my_distance(a,b):\n", " a = np.array(a)\n", " b = np.array(b)\n", " return np.sqrt(np.sum((a-b)**2))" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "nbgrader": { "grade": true, "grade_id": "cell-d96cb3c1a49758db", "locked": true, "points": 0, "schema_version": 3, "solution": false, "task": false } }, "outputs": [], "source": [ "assert my_distance((0,0),(3,4)) == 5\n", "assert my_distance((3,4), (0,0)) == 5\n", "assert my_distance((13,14), (10,10)) == 5\n", "assert my_distance((10,10), (13,14)) == 5" ] }, { "cell_type": "markdown", "metadata": { "nbgrader": { "grade": false, "grade_id": "cell-9426c238469156ae", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "## Q3 compute the distance between each point on `bee_track` and `flower`. Put the results in a 1D numpy array called `distance`.\n", "\n", "Hint: recall the function you wrote in the \"numpy basics\" exercise called `compute_distance`." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "nbgrader": { "grade": false, "grade_id": "cell-bf78a3429e48b28d", "locked": false, "schema_version": 3, "solution": true, "task": false } }, "outputs": [ { "data": { "text/plain": [ "array([18.96154002, 16.02203642, 13.18581669, 10.53661864, 8.256474 ,\n", " 6.73148224, 6.5154281 , 7.71901634, 9.83412849, 12.40287921,\n", " 15.19694713, 18.11235632, 21.09886634, 24.13009179, 27.19108233,\n", " 30.27281036, 33.36953095, 36.47742595, 39.59386407, 42.71697555])" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "distance = np.zeros(bee_track.shape[1])\n", "for i in range(bee_track.shape[1]):\n", " bee_pos = bee_track[:,i]\n", " distance[i] = my_distance(bee_pos, flower)\n", "display(distance)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "nbgrader": { "grade": true, "grade_id": "cell-70fd1e669decb646", "locked": true, "points": 1, "schema_version": 3, "solution": false, "task": false } }, "outputs": [], "source": [ "# If this runs without error, it means the answer in your previous cell was correct.\n", "assert ads_hash(np.round(distance*1000).astype(np.int32))=='54f4f2edcb'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Q4 make a plot of the bee track parameter `t` on the X axis and `distance` on the Y axis.\n", "\n", "It should look like this:\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "nbgrader": { "grade": true, "grade_id": "cell-acdc61a7b1539944", "locked": false, "points": 1, "schema_version": 3, "solution": true, "task": false } }, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, 'distance')" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjMAAAGwCAYAAABcnuQpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABNpUlEQVR4nO3deVxU9eLG8c+wDYuAobIpKu4rLmAuWdqiv7xmmZWVuWtpaUW2aNvNuqVlN1uupanlUpneymw3NbdKTUBx30XFBXFllQFmzu8PjBuphQicGXjer9d5JWeG4zOJM4/nnO/3azEMw0BERETERbmZHUBERETkSqjMiIiIiEtTmRERERGXpjIjIiIiLk1lRkRERFyayoyIiIi4NJUZERERcWkeZgcoaw6Hg6NHj+Lv74/FYjE7joiIiBSDYRhkZGQQHh6Om9tfn3up8GXm6NGjREREmB1DRERESiA5OZlatWr95XMqfJnx9/cHCv5nBAQEmJxGREREiiM9PZ2IiIjCz/G/UuHLzO+XlgICAlRmREREXExxbhHRDcAiIiLi0lRmRERExKWpzIiIiIhLU5kRERERl6YyIyIiIi5NZUZERERcmsqMiIiIuDSVGREREXFpKjMiIiLi0lRmRERExKWpzIiIiIhLU5kRERERl6YyIyIiIiXicBj8tOO42TFUZkRERKRk3li6i2Fz4nnxm22m5lCZERERkcv29aajvLtiHwBRtQJNzaIyIyIiIpdly+E0nvp8EwAjrqvH7W1qmZpHZUZERESKLTUjhwc+iicnz0HXxjV46uYmZkdSmREREZHiseXbGflRAsfScqhXw4937m2Du5vF7FgqMyIiIvL3DMPguS+3suHQWfy9PZg5MIYAb0+zYwEqMyIiIlIMs349wGcJh3GzwJR+balXo4rZkQqpzIiIiMhf+nnPCV7+bjsAz/yjKV0a1TA5UVEqMyIiInJJSSezGD1vIw4D7mhbi2GdI82OdAGVGREREbmojJw87p8bT9q5PNrUrsort7fAYjH/ht8/U5kRERGRC9gdBo/OT2RvaiahAd683z8ab093s2NdlMqMiIiIXODfS3axfGcqVg833h8QTXCAt9mRLkllRkRERIr4KvEIU1cWLFUw6c4oWkVUNTfQ31CZERERkUKbD5/lqc83AzCyS31ua13T5ER/T2VGREREgPNLFcxN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zsKkpqZe8K+diuThhx/m66+/ZsWKFdSqVcvsOGUmISGB1NRUoqOj8fDwwMPDg1WrVvHOO+/g4eGB3W43O2KpCgsLo1mzZkX2NW3atELezP67J598knHjxnHPPffQsmVLBgwYwGOPPcbEiRPNjlbmQkNDASrd+1deXh59+/YlKSmJpUuXVtizMj///DOpqanUrl278P3r4MGDPP7449StW9fseGVKZeYyeXl5ER0dzdKlS4vsX7p0KZ06dTIpVdkxDIPRo0ezcOFCli9fTmRkpNmRytSNN97Ili1bSExMLNxiYmK47777SExMxN3d3eyIpeqaa665YKj97t27qVOnjkmJyl52djZubkXf+tzd3SvM0Oy/EhkZSWhoaJH3r9zcXFatWlUh37/gf0Vmz549LFu2jGrVqpkdqcwMGDCAzZs3F3n/Cg8P58knn+THH380O16Z0mWmEhgzZgwDBgwgJiaGjh07Mn36dA4dOsTIkSPNjlbqRo0axbx58/jqq6/w9/cv/BddYGAgPj4+Jqcrff7+/hfcD+Tn50e1atUq5H1Cjz32GJ06dWLChAn07duX9evXM336dKZPn252tDLTq1cvXnnlFWrXrk3z5s3ZuHEjkydPZujQoWZHKxWZmZns3bu38OukpCQSExMJCgqidu3axMbGMmHCBBo2bEjDhg2ZMGECvr6+9OvXz8TUJfdXrzc8PJw777yTDRs28O2332K32wvfw4KCgvDy8jIrdon93Z/vn8uap6cnoaGhNG7cuLyjli9zB1O5rnfffdeoU6eO4eXlZbRt27bCDlUGLrrNmjXL7GjlpiIPzTYMw/jmm2+MFi1aGFar1WjSpIkxffp0syOVqfT0dOPRRx81ateubXh7exv16tUznn32WcNms5kdrVSsWLHion9nBw0aZBhGwfDsF154wQgNDTWsVqtx3XXXGVu2bDE39BX4q9eblJR0yfewFStWmB29RP7uz/fPKsvQbIthGEY59SYRERGRUqd7ZkRERMSlqcyIiIiIS1OZEREREZemMiMiIiIuTWVGREREXJrKjIiIiLg0lRkRERFxaSozIiIi4tJUZkRERMSlqcyIiMvq2rUrsbGxZscQEZOpzIiIiIhL09pMIuKSBg8ezJw5c4rsS0pKom7duuYEEhHTqMyIiEtKS0ujR48etGjRgpdeegmAGjVq4O7ubnIyESlvHmYHEBEpicDAQLy8vPD19SU0NNTsOCJiIt0zIyIiIi5NZUZERERcmsqMiLgsLy8v7Ha72TFExGQqMyLisurWrctvv/3GgQMHOHnyJA6Hw+xIImIClRkRcVlPPPEE7u7uNGvWjBo1anDo0CGzI4mICTQ0W0RERFyazsyIiIiIS1OZEREREZemMiMiIiIuTWVGREREXJrKjIiIiLg0lRkRERFxaSozIiIi4tJUZkRERMSlqcyIiIiIS1OZEREREZemMiMiIiIu7f8BIET4B8yMaAEAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Your code here. Check it is correct by comparing your figure with the above.\n", "fig, ax = plt.subplots(nrows=1, ncols=1)\n", "ax.plot( t, distance )\n", "ax.set_xlabel('t')\n", "ax.set_ylabel('distance')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Q5 Using `calc_distance_func` from the lecture, find the value of `t` that minimizes the distance between the bee and the flower. Save the result in `best_t`." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "nbgrader": { "grade": false, "grade_id": "cell-23d19427610d2072", "locked": false, "schema_version": 3, "solution": true, "task": false } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "t: 0.0 -> dist: 18.96154002184422\n", "t: 1.0 -> dist: 15.253196386331622\n", "t: 2.6180339999999998 -> dist: 9.762703375781847\n", "t: 15.908845000462023 -> dist: 46.31882030539557\n", "t: 7.694671914602477 -> dist: 14.474578507642399\n", "t: 4.55713707768905 -> dist: 6.429979961714315\n", "t: 4.606244750761416 -> dist: 6.44546748591665\n", "t: 4.427556823536537 -> dist: 6.417932686426614\n", "t: 3.7363806287215797 -> dist: 7.03303244654773\n", "t: 4.454999062553287 -> dist: 6.416983793293304\n", "t: 4.455122430031719 -> dist: 6.416983777420453\n", "t: 4.455112223273879 -> dist: 6.416983777290153\n", "t: 4.455112157328219 -> dist: 6.416983777290158\n", "t: 4.45511228921954 -> dist: 6.416983777290159\n", " message: \n", " Optimization terminated successfully;\n", " The returned value satisfies the termination criteria\n", " (using xtol = 1.48e-08 )\n", " success: True\n", " fun: 6.416983777290153\n", " x: 4.455112223273879\n", " nit: 10\n", " nfev: 14\n" ] } ], "source": [ "# Your code here. \n", "\n", "def compute_distance(a,b):\n", " a = np.array(a)\n", " b = np.array(b)\n", " return np.sqrt(np.sum((a-b)**2))\n", "\n", "def calc_distance_func(t):\n", " x1, y1 = flower\n", " x2, y2 = make_bee_track(t)\n", " dist = compute_distance((x1,y1), (x2,y2))\n", " print(f't: {t} -> dist: {dist}')\n", " return dist\n", "\n", "import scipy.optimize\n", "result = scipy.optimize.minimize_scalar(calc_distance_func)\n", "print(result)\n", "best_t = result.x" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "nbgrader": { "grade": true, "grade_id": "cell-0a3594afd2952a33", "locked": true, "points": 1, "schema_version": 3, "solution": false, "task": false } }, "outputs": [], "source": [ "# If this runs without error, it means the answer in your previous cell was correct.\n", "assert ads_hash(np.round(best_t*1000).astype(np.int32))=='dec1ab2f6d'" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([7.82044889, 3.89102244])" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "make_bee_track(best_t)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Q6 What is the position of the bee when it is closest to the flower? Save the result as a numpy array in `best_pos`." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "nbgrader": { "grade": false, "grade_id": "cell-cac598c7f739d146", "locked": false, "schema_version": 3, "solution": true, "task": false } }, "outputs": [], "source": [ "# Your code here. \n", "best_pos = make_bee_track(best_t)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "nbgrader": { "grade": true, "grade_id": "cell-9d882991838f0996", "locked": true, "points": 1, "schema_version": 3, "solution": false, "task": false } }, "outputs": [], "source": [ "# If this runs without error, it means the answer in your previous cell was correct.\n", "assert type(best_pos)==np.ndarray\n", "assert best_pos.ndim==1\n", "assert best_pos.shape==(2,)\n", "assert ads_hash(np.round(best_pos[0]*1000).astype(np.int32))=='e33b9415bc'\n", "assert ads_hash(np.round(best_pos[1]*1000).astype(np.int32))=='f71cbfce4c'" ] } ], "metadata": { "celltoolbar": "Create Assignment", "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.11.7" } }, "nbformat": 4, "nbformat_minor": 4 }