pm21-dragon/exercises/release/exercise-08/2__Optimization_first_steps.ipynb
2024-11-29 09:11:15 +01:00

543 lines
58 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "29874499fd2a20779e162626f76f6776",
"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": null,
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "6f1fee68b047ccaf945f9998a29d8651",
"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": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "bd84ae4c048d756b33d0fd85d55f1aec",
"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": null,
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "13882d6eb738408b7520368a4b5e8ff5",
"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": null,
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "5f73a413f4a03726e882c755a3430c17",
"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": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "6aa761a551cb0142afbfe7e7d81947ed",
"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": null,
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "c8e52b43cbe861d8eddacccc87aeb1e2",
"grade": false,
"grade_id": "cell-4b58d56276437c3a",
"locked": true,
"schema_version": 3,
"solution": false,
"task": false
}
},
"outputs": [],
"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": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "0f3a53f8323083b2effbac78689c09d7",
"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",
"<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAisAAAGdCAYAAADT1TPdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAABcgElEQVR4nO3dd3hUZfo+8Hsy6Z2SSkIPSpWiYlAkKuBaUcAVdRUrIKIiuiKLruhPwL7iUhSwrgrsShER9ysiTSnSoggsBggkgcRQQhqpM+/vj8eTMz0zIeVE7s91zaWZTDlzMsy553mf9z0mpZQCERERkUH5NfUGEBEREXnCsEJERESGxrBCREREhsawQkRERIbGsEJERESGxrBCREREhsawQkRERIbGsEJERESG5t/UG3CurFYrjh8/joiICJhMpqbeHCIiIvKCUgrFxcVITEyEn5/n2kmzDyvHjx9HcnJyU28GERER1UF2djaSkpI83qbZh5WIiAgA8mIjIyObeGuIiIjIG0VFRUhOTq45jnvS7MOKNvQTGRnJsEJERNTMeNPCwQZbIiIiMjSGFSIiIjK0Bg0r8+bNQ69evWqGaFJTU/H111/X/F4phWnTpiExMREhISFIS0vD3r17G3KTiIiIqJlp0J6VpKQkvPzyy+jcuTMA4KOPPsKwYcOwe/dudO/eHa+++irefPNNfPjhh+jSpQteeuklDBkyBAcOHPCq4YaIiMhXSilUV1fDYrE09ab8oZnNZvj7+9fLsiImpZSqh23yWsuWLfHaa6/h/vvvR2JiIiZOnIjJkycDACoqKhAXF4dXXnkFY8eO9erxioqKEBUVhcLCQjbYEhGRR5WVlcjNzcXZs2ebelPOC6GhoUhISEBgYKDT73w5fjfabCCLxYL//Oc/KC0tRWpqKjIzM5GXl4ehQ4fW3CYoKAiDBg3C5s2b3YaViooKVFRU1PxcVFTU4NtORETNn9VqRWZmJsxmMxITExEYGMjFRBuIUgqVlZU4ceIEMjMzkZKSUuvCb540eFjZs2cPUlNTUV5ejvDwcCxfvhzdunXD5s2bAQBxcXF2t4+Li8PRo0fdPt7MmTPxwgsvNOg2ExHRH09lZSWsViuSk5MRGhra1JvzhxcSEoKAgAAcPXoUlZWVCA4OrvNjNfhsoAsuuADp6enYunUrHn74YYwePRr79u2r+b1jqlVKeUy6U6ZMQWFhYc0lOzu7wbadiIj+eM7lGz75pr72dYNXVgIDA2sabC+++GJs374ds2bNqulTycvLQ0JCQs3t8/PznaottoKCghAUFNSwG01ERESG0ejxUimFiooKdOjQAfHx8VizZk3N7yorK7FhwwYMGDCgsTeLiIiIDKpBw8rf/vY3bNq0CUeOHMGePXswdepUrF+/HnfddRdMJhMmTpyIGTNmYPny5fjll19w7733IjQ0FHfeeWdDbhYREdG5sViA9euBRYvkvw08DVophTFjxqBly5YwmUyIjo7GxIkTG/Q5jaRBh4F+++033H333cjNzUVUVBR69eqF//73vxgyZAgA4Omnn0ZZWRnGjx+PgoIC9O/fH9988w3XWCEiIuNatgx4/HEgJ0e/LikJmDULGD68QZ7yv//9Lz788EOsX78eHTt2xMiRIxvkeYyqQcPKe++95/H3JpMJ06ZNw7Rp0xpyM4iIiOrHsmXAyJGA4xJlx47J9Z9/3iCB5dChQ0hISKhpk/D3N9Z5iKuqqhAQENBgj8+WaCIiIm9YLFJRcbWWqnbdxIn1PiR077334tFHH0VWVhZMJhPat2/vdJuCggLcc889aNGiBUJDQ3HdddchIyPj901TiImJwdKlS2tu37t3b8TGxtb8vGXLFgQEBKCkpAQAUFhYiDFjxiA2NhaRkZG4+uqr8dNPP9Xcftq0aejduzfef/99dOzYEUFBQWjINWYZVoiIiLyxaZP90I8jpYDsbLldPZo1axZefPFFJCUlITc3F9u3b3e6zb333osdO3Zg5cqV2LJlC5RSuP7661FVVQWTyYQrr7wS69evByDBZt++faiqqqpZSmT9+vXo168fwsPDoZTCDTfcgLy8PKxevRo7d+5E3759cc011+D06dM1z3nw4EH8+9//xtKlS5Genl6vr9mRsepIRERERpWbW7+381JUVBQiIiJgNpsRHx/v9PuMjAysXLkSP/zwQ80w0aeffork5GSsWLECt912G9LS0jB//nwAwMaNG3HRRRehbdu2WL9+Pbp164b169cjLS0NALBu3Trs2bMH+fn5NUuFvP7661ixYgU+//xzjBkzBoDM4P3Xv/6FmJiYen29rrCyQkRE5A2bNcHq5Xb1ZP/+/fD390f//v1rrmvVqhUuuOAC7N+/HwCQlpaGvXv34uTJk9iwYQPS0tKQlpaGDRs2oLq6Gps3b8agQYMAADt37kRJSQlatWqF8PDwmktmZiYOHTpU8xzt2rVrlKACsLJCRETknYEDZdbPsWOu+1ZMJvn9wIGNulnuekVsV4Tv0aMHWrVqhQ0bNmDDhg148cUXkZycjOnTp2P79u0oKyvDFVdcAUDOoZSQkFAzbGQrOjq65v/DwsLq/bW4w7BCRETkDbNZpiePHCnBxDYkaKeJeestuV0j6tatG6qrq7Ft27aaYaBTp07h119/RdeuXX/fPOlb+eKLL/DLL79g4MCBiIiIQFVVFd555x307du3ZtmQvn37Ii8vD/7+/i6beZsCh4GIiIi8NXy4TE9u08b++qSkBpu2XJuUlBQMGzYMDz30EL7//nv89NNP+Mtf/oI2bdpg2LBhNbdLS0vDZ599hl69eiEyMrImwHz66ac1/SoAMHjwYKSmpuKWW27B//3f/+HIkSPYvHkznn32WezYsaPRXx/AsEJEROSb4cOBI0eAdeuAzz6T/2ZmNklQ0XzwwQfo168fbrzxRqSmpkIphdWrV9utfXLVVVfBYrHYBZNBgwbBYrHU9KsAUoVZvXo1rrzyStx///3o0qULRo0ahSNHjng8d19DMqmGnBjdCIqKihAVFYXCwkJERkY29eYQEZFBlZeXIzMzEx06dEBwcHBTb855wdM+9+X4zcoKERERGRrDChERERkawwoREREZGsMKERERGRrDChERERkawwoREREZGsMKERERGRrDChERERkawwoREZHBpaWlYeLEiU29GU2GYYWIiIgMjWGFiIiIDI1hhYiIqA5ycnKwbt065OTkNMrzVVdXY8KECYiOjkarVq3w7LPPQju9X2VlJZ5++mm0adMGYWFh6N+/P9avX293/82bN+PKK69ESEgIkpOT8dhjj6G0tLRRtv1cMawQEdF5SymF0tJSny9z585Fu3btcPXVV6Ndu3aYO3euT/evyzmEP/roI/j7+2Pbtm14++238Y9//AMLFy4EANx333344YcfsHjxYvz888+47bbb8Kc//QkZGRkAgD179uDaa6/F8OHD8fPPP2PJkiX4/vvvMWHChHrdnw2FZ10mIqLzgqszAJeWliI8PLzRt6WkpARhYWFe3z4tLQ35+fnYu3cvTCYTAOCZZ57BypUr8eWXXyIlJQU5OTlITEysuc/gwYNx6aWXYsaMGbjnnnsQEhKCd999t+b333//PQYNGoTS0tIGOwt1fZ112b9Bto6IiIjq1WWXXVYTVAAgNTUVb7zxBnbs2AGlFLp06WJ3+4qKCrRq1QoAsHPnThw8eBCffvppze+VUrBarcjMzETXrl0b50XUEcMKERGdt0JDQ1FSUuLTfY4dO4auXbvCarXWXGc2m7Fv3z60adPG6+etT2azGTt37oTZbLa7XqsaWa1WjB07Fo899pjTfdu2bVuv29IQGFaIiOi8ZTKZfBqOAYAuXbpg/vz5GDt2LCwWC8xmM959912nykZ927p1q9PPKSkp6NOnDywWC/Lz8zFw4ECX9+3bty/27t2Lzp07N+g2NhQ22BIREfnogQcewJEjR7Bu3TocOXIEDzzwQIM/Z3Z2NiZNmoQDBw5g0aJF+Oc//4nHH38cXbp0wV133YV77rkHy5YtQ2ZmJrZv345XXnkFq1evBgBMnjwZW7ZswSOPPIL09HRkZGRg5cqVePTRRxt8u+sDKytERER1kJSUhKSkpEZ7vnvuuQdlZWW49NJLYTab8eijj2LMmDEAgA8++AAvvfQSnnzySRw7dgytWrVCamoqrr/+egBAr169sGHDBkydOhUDBw6EUgqdOnXC7bff3mjbfy44G4iIiM4LnmamUMOor9lAHAYiIiIiQ2NYISIiIkNjWCEiIiJDY1ghIiIiQ2NYISIiIkNjWCEiovNKM58E26zU175mWCEiovNCQEAAAODs2bNNvCXnD21fa/u+rrgoHBERnRfMZjOio6ORn58PQM7PY3tiQKo/SimcPXsW+fn5iI6Odjpnka8YVoiI6LwRHx8PADWBhRpWdHR0zT4/FwwrRER03jCZTEhISEBsbCyqqqqaenP+0AICAs65oqJhWCEiovOO2WyutwMpNTw22BIREZGhMawQERGRoTGsEBERkaExrBAREZGhMawQERGRoTGsEBERkaExrBAREZGhMawQERGRoTGsEBERkaExrBAREZGhMawQERGRoTGsEBERkaExrBAREZGhMawQERGRoTGsEBERkaExrBAREZGhMawQERGRoTGsEBERkaExrBAREZGhMawQERGRoTGsEBERkaExrBAREZGhMawQERGRoTGsEBERkaE1aFiZOXMmLrnkEkRERCA2Nha33HILDhw4YHcbpRSmTZuGxMREhISEIC0tDXv37m3IzSIiIqJmpEHDyoYNG/DII49g69atWLNmDaqrqzF06FCUlpbW3ObVV1/Fm2++idmzZ2P79u2Ij4/HkCFDUFxc3JCbRkRERM2ESSmlGuvJTpw4gdjYWGzYsAFXXnkllFJITEzExIkTMXnyZABARUUF4uLi8Morr2Ds2LG1PmZRURGioqJQWFiIyMjIhn4JREREVA98OX43as9KYWEhAKBly5YAgMzMTOTl5WHo0KE1twkKCsKgQYOwefNml49RUVGBoqIiuwsRERH9cTVaWFFKYdKkSbjiiivQo0cPAEBeXh4AIC4uzu62cXFxNb9zNHPmTERFRdVckpOTG3bDiYiIqEk1WliZMGECfv75ZyxatMjpdyaTye5npZTTdZopU6agsLCw5pKdnd0g20tERETG4N8YT/Loo49i5cqV2LhxI5KSkmquj4+PByAVloSEhJrr8/PznaotmqCgIAQFBTXsBhMREZFhNGhlRSmFCRMmYNmyZfjuu+/QoUMHu9936NAB8fHxWLNmTc11lZWV2LBhAwYMGNCQm0ZERETNRINWVh555BF89tln+OKLLxAREVHThxIVFYWQkBCYTCZMnDgRM2bMQEpKClJSUjBjxgyEhobizjvvbMhNIyIiomaiQcPKvHnzAABpaWl213/wwQe49957AQBPP/00ysrKMH78eBQUFKB///745ptvEBER0ZCbRkRERM1Eo66z0hC4zgoREVHzY9h1VoiIiIh8xbBCREREhsawQkRERIbGsEJERESGxrBCREREhsawQkRERIbGsEJERESGxrBCREREhsawQkRERIbGsEJERESGxrBCREREhsawQkRERIbGsEJERESGxrBCREREhsawQkRERIbGsEJERESGxrBCREREhsawQkRERIbGsEJERESGxrBCREREhsawQkRERIbGsEJERESGxrBCREREhsawQkRERIbGsEJERESGxrBCREREhsawQkRERIbGsEJERESGxrBCREREhsawQkRERIbGsEJERESGxrBCREREhsawQkRERIbGsEJERESGxrBCREREhsawQkRERIbGsEJERESGxrBCREREhsawQkRERIbGsEJERESGxrBCREREhsawQkRERIbGsEJERESGxrBCREREhsawQkRERIbGsEJERESGxrBCREREhsawQkRERIbGsEJERESGxrBCREREhsawQkRE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toNScZCVQuu3OsFhFCIiOt9xGKgesMmTiIio4TCs1BMGCiIioobBnpV6wr4MIiKipufjuqhEREREjYthhYiIiAyNYYWIiIgMjWGFiIiIDI1hhYiIiAyNYYWIiIgMjWGFiIiIDI1hhYiIiAyNYYWIiIgMjWGFiIiIDI1hhYiIiAyNYYWIiIgMjWGFiIiIDM0QYWXu3Lno0KEDgoOD0a9fP2zatKmpN4mIiIgMosnDypIlSzBx4kRMnToVu3fvxsCBA3HdddchKyurqTeNiIiIDMCklFJNuQH9+/dH3759MW/evJrrunbtiltuuQUzZ86s9f5FRUWIiopCYWEhIiMjG3JTiYiIqJ74cvxu0spKZWUldu7ciaFDh9pdP3ToUGzevNnlfSoqKlBUVGR3ISIioj+uJg0rJ0+ehMViQVxcnN31cXFxyMvLc3mfmTNnIioqquaSnJzcGJtKRERETaTJe1YAwGQy2f2slHK6TjNlyhQUFhbWXLKzsxtjE4mIiKiJ+Dflk7du3Rpms9mpipKfn+9UbdEEBQUhKCioMTaPiIiIDKBJKyuBgYHo168f1qxZY3f9mjVrMGDAgCbaKiIiIjKSJq2sAMCkSZNw99134+KLL0Zqairmz5+PrKwsjBs3rqk3jYiIiAygycPK7bffjlOnTuHFF19Ebm4uevTogdWrV6Ndu3ZNvWlERERkAE2+zsq54jorREREzU+zWWeFiIiIqDYMK0RERGRoDCtERERkaAwrREREZGgMK0RERGRoDCtERERkaAwrREREZGgMK0RERGRoDCtERERkaAwrREREZGgMK0RERGRoDCtERERkaAwrREREZGgMK0RERGRoDCtERERkaAwrREREZGgMK0RERGRoDCtERERkaAwrREREZGgMK0RERGRoDCtERERkaAwrREREZGgMK0RERGRoDCtERERkaAwrREREZGgMK0RERGRoDCtERERkaAwrREREZGgMK0RERGRoDCtERERkaAwrREREZGgMK0RERGRoDCtERERkaAwrREREZGgMK0RERGRoDCtERERkaAwrREREZGgMK0RERGRoDCtERERkaAwrREREZGgMK0RERGRoDCtERERkaAwrREREZGgMK0RERGRoDCtERERkaAwrREREZGgMK0RERGRoDCtERERkaAwrREREZGgMK0RERGRoDCtERERkaAwrREREZGgMK0RERGRoDCtERERkaAwrREREZGgMK0RERGRoDCtERERkaAwrREREZGgMK0RERGRoDCtERERkaAwrREREZGgMK0RERGRoDCtERERkaAwrREREZGgNGlamT5+OAQMGIDQ0FNHR0S5vk5WVhZtuuglhYWFo3bo1HnvsMVRWVjbkZhEREVEz4t+QD15ZWYnbbrsNqampeO+995x+b7FYcMMNNyAmJgbff/89Tp06hdGjR0MphX/+858NuWlERETUTDRoWHnhhRcAAB9++KHL33/zzTfYt28fsrOzkZiYCAB44403cO+992L69OmIjIxsyM0jIiKiZqBJe1a2bNmCHj161AQVALj22mtRUVGBnTt3NuGWERERkVE0aGWlNnl5eYiLi7O7rkWLFggMDEReXp7L+1RUVKCioqLm56KiogbdRiIiImpaPldWpk2bBpPJ5PGyY8cOrx/PZDI5XaeUcnk9AMycORNRUVE1l+TkZF9fAhERETUjPldWJkyYgFGjRnm8Tfv27b16rPj4eGzbts3uuoKCAlRVVTlVXDRTpkzBpEmTan4uKipiYCEiIvoD8zmstG7dGq1bt66XJ09NTcX06dORm5uLhIQEANJ0GxQUhH79+rm8T1BQEIKCgurl+YmIiMj4GrRnJSsrC6dPn0ZWVhYsFgvS09MBAJ07d0Z4eDiGDh2Kbt264e6778Zrr72G06dP46mnnsJDDz3EmUBEREQEoIHDyt///nd89NFHNT/36dMHALBu3TqkpaXBbDbjq6++wvjx43H55ZcjJCQEd955J15//fWG3CwiIiJqRkxKKdXUG3EuioqKEBUVhcLCQlZjiIiImglfjt88NxAREREZGsMKERERGRrDChERERkawwoREREZGsMKERERGRrDChERERkawwoREREZGsMKERERGRrDChERERkawwoREREZGsMKERERGRrDChERERkawwoREREZGsMKERERGRrDChERERkawwoREREZGsMKERERGRrDChERERkawwoREREZGsMKERERGRrDChERERkawwoREREZGsMKERERGRrDChERERkawwoREREZGsMKERERGRrDChERERkawwoREREZGsMKERERGRrDChERERkawwoREREZGsMKERERGRrDChERERkawwoREREZGsMKERERGRrDChERERkawwoREREZGsMKERERGRrDChERERkawwoREREZGsMKERERGRrDChERERkawwoREREZGsMKERERGRrDChERERkawwoREREZGsMKERERGRrDChERERkawwoREREZGsMKERERGRrDChERERkawwoREREZmn9Tb8C5UkoBAIqKipp4S4iIiMhb2nFbO4570uzDSnFxMQAgOTm5ibeEiIiIfFVcXIyoqCiPtzEpbyKNgVmtVhw/fhwREREwmUz1+thFRUVITk5GdnY2IiMj6/Wx/2i4r7zHfeU97ivvcV95j/vKNw21v5RSKC4uRmJiIvz8PHelNPvKip+fH5KSkhr0OSIjI/mG9hL3lfe4r7zHfeU97ivvcV/5piH2V20VFQ0bbImIiMjQGFaIiIjI0BhWPAgKCsLzzz+PoKCgpt4Uw+O+8h73lfe4r7zHfeU97ivfGGF/NfsGWyIiIvpjY2WFiIiIDI1hhYiIiAyNYYWIiIgMjWGFiIiIDI1hxYXp06djwIABCA0NRXR0tMvbZGVl4aabbkJYWBhat26Nxx57DJWVlY27oQYxd+5cdOjQAcHBwejXrx82bdrU1JtkCBs3bsRNN92ExMREmEwmrFixwu73SilMmzYNiYmJCAkJQVpaGvbu3ds0G9uEZs6ciUsuuQQRERGIjY3FLbfcggMHDtjdhvtKzJs3D7169apZnCs1NRVff/11ze+5n9ybOXMmTCYTJk6cWHMd95du2rRpMJlMdpf4+Pia3zf1vmJYcaGyshK33XYbHn74YZe/t1gsuOGGG1BaWorvv/8eixcvxtKlS/Hkk0828pY2vSVLlmDixImYOnUqdu/ejYEDB+K6665DVlZWU29akystLcVFF12E2bNnu/z9q6++ijfffBOzZ8/G9u3bER8fjyFDhtSc7+p8sWHDBjzyyCPYunUr1qxZg+rqagwdOhSlpaU1t+G+EklJSXj55ZexY8cO7NixA1dffTWGDRtWc9DgfnJt+/btmD9/Pnr16mV3PfeXve7duyM3N7fmsmfPnprfNfm+UuTWBx98oKKiopyuX716tfLz81PHjh2ruW7RokUqKChIFRYWNuIWNr1LL71UjRs3zu66Cy+8UD3zzDNNtEXGBEAtX7685mer1ari4+PVyy+/XHNdeXm5ioqKUu+8804TbKFx5OfnKwBqw4YNSinuq9q0aNFCLVy4kPvJjeLiYpWSkqLWrFmjBg0apB5//HGlFN9Xjp5//nl10UUXufydEfYVKyt1sGXLFvTo0QOJiYk111177bWoqKjAzp07m3DLGldlZSV27tyJoUOH2l0/dOhQbN68uYm2qnnIzMxEXl6e3b4LCgrCoEGDzvt9V1hYCABo2bIlAO4rdywWCxYvXozS0lKkpqZyP7nxyCOP4IYbbsDgwYPtruf+cpaRkYHExER06NABo0aNwuHDhwEYY181+xMZNoW8vDzExcXZXdeiRQsEBgYiLy+vibaq8Z08eRIWi8VpX8TFxZ1X+6EutP3jat8dPXq0KTbJEJRSmDRpEq644gr06NEDAPeVoz179iA1NRXl5eUIDw/H8uXL0a1bt5qDBveTbvHixdi1axe2b9/u9Du+r+z1798fH3/8Mbp06YLffvsNL730EgYMGIC9e/caYl+dN5UVV81DjpcdO3Z4/Xgmk8npOqWUy+v/6Bxf8/m6H+qC+87ehAkT8PPPP2PRokVOv+O+EhdccAHS09OxdetWPPzwwxg9ejT27dtX83vuJ5GdnY3HH38cn3zyCYKDg93ejvtLXHfddRgxYgR69uyJwYMH46uvvgIAfPTRRzW3acp9dd5UViZMmIBRo0Z5vE379u29eqz4+Hhs27bN7rqCggJUVVU5Jc8/statW8NsNjtVUfLz88+r/VAXWpd9Xl4eEhISaq4/n/fdo48+ipUrV2Ljxo1ISkqquZ77yl5gYCA6d+4MALj44ouxfft2zJo1C5MnTwbA/aTZuXMn8vPz0a9fv5rrLBYLNm7ciNmzZ9fMOOP+ci0sLAw9e/ZERkYGbrnlFgBNu6/Om8pK69atceGFF3q8eErftlJTU/HLL78gNze35rpvvvkGQUFBdv8w/ugCAwPRr18/rFmzxu76NWvWYMCAAU20Vc1Dhw4dEB8fb7fvKisrsWHDhvNu3ymlMGHCBCxbtgzfffcdOnToYPd77ivPlFKoqKjgfnJwzTXXYM+ePUhPT6+5XHzxxbjrrruQnp6Ojh07cn95UFFRgf379yMhIcEY761GaeNtZo4ePap2796tXnjhBRUeHq52796tdu/erYqLi5VSSlVXV6sePXqoa665Ru3atUt9++23KikpSU2YMKGJt7zxLV68WAUEBKj33ntP7du3T02cOFGFhYWpI0eONPWmNbni4uKa9w4A9eabb6rdu3ero0ePKqWUevnll1VUVJRatmyZ2rNnj7rjjjtUQkKCKioqauItb1wPP/ywioqKUuvXr1e5ubk1l7Nnz9bchvtKTJkyRW3cuFFlZmaqn3/+Wf3tb39Tfn5+6ptvvlFKcT/VxnY2kFLcX7aefPJJtX79enX48GG1detWdeONN6qIiIiaz/Km3lcMKy6MHj1aAXC6rFu3ruY2R48eVTfccIMKCQlRLVu2VBMmTFDl5eVNt9FNaM6cOapdu3YqMDBQ9e3bt2bK6flu3bp1Lt9Ho0ePVkrJdMDnn39excfHq6CgIHXllVeqPXv2NO1GNwFX+wiA+uCDD2puw30l7r///pp/azExMeqaa66pCSpKcT/VxjGscH/pbr/9dpWQkKACAgJUYmKiGj58uNq7d2/N75t6X5mUUqpxajhEREREvjtvelaIiIioeWJYISIiIkNjWCEiIiJDY1ghIiIiQ2NYISIiIkNjWCEiIiJDY1ghIiIiQ2NYISIiIkNjWCEiIiJDY1ghIiIiQ2NYISIiIkNjWCEiIiJD+/+emCuyw3N8xgAAAABJRU5ErkJggg==\"/>\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": null,
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "38fbad4ec96d8ade393535b625140003",
"grade": true,
"grade_id": "cell-43f8774b1a82b15b",
"locked": false,
"points": 1,
"schema_version": 3,
"solution": true,
"task": false
}
},
"outputs": [],
"source": [
"# YOUR CODE HERE\n",
"raise NotImplementedError()"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "89805e9c9678ff01669528f20a596bf6",
"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": null,
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "9bd3bd0fb3a886f4696138c95e0058ab",
"grade": false,
"grade_id": "cell-9d86e35ff582bf8f",
"locked": false,
"schema_version": 3,
"solution": true,
"task": false
}
},
"outputs": [],
"source": [
"# YOUR CODE HERE\n",
"raise NotImplementedError()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "b359ea8e38a47e5320e08ce6158dc39c",
"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": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "5220e92a49ceb61457be556c246b28ce",
"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": null,
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "922ea2de206db155b31c1b6020e50c27",
"grade": false,
"grade_id": "cell-bf78a3429e48b28d",
"locked": false,
"schema_version": 3,
"solution": true,
"task": false
}
},
"outputs": [],
"source": [
"# YOUR CODE HERE\n",
"raise NotImplementedError()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "0304ff76ac1ade2c3221a53c5df5fbb2",
"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",
"<img src=\"data:image/png;base64,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&#10;\">\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "c03c9f9064ad82267ed7ad1ff2274116",
"grade": true,
"grade_id": "cell-acdc61a7b1539944",
"locked": false,
"points": 1,
"schema_version": 3,
"solution": true,
"task": false
}
},
"outputs": [],
"source": [
"# YOUR CODE HERE\n",
"raise NotImplementedError()"
]
},
{
"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": null,
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "ea188c9450758aa26fecfdc16042a9f2",
"grade": false,
"grade_id": "cell-23d19427610d2072",
"locked": false,
"schema_version": 3,
"solution": true,
"task": false
}
},
"outputs": [],
"source": [
"# YOUR CODE HERE\n",
"raise NotImplementedError()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "7a33eaaaaca8781f883635cee037a71d",
"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": null,
"metadata": {},
"outputs": [],
"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": null,
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "20073a563548884f84b927f1c1f154eb",
"grade": false,
"grade_id": "cell-cac598c7f739d146",
"locked": false,
"schema_version": 3,
"solution": true,
"task": false
}
},
"outputs": [],
"source": [
"# YOUR CODE HERE\n",
"raise NotImplementedError()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "4e73e4a1310b052d0bd683f8e5b40fd3",
"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": {
"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
}