diff --git "a/assignment-1/assignment_1/.ipynb_checkpoints/AI_Assignment_1-checkpoint.ipynb" "b/assignment-1/assignment_1/.ipynb_checkpoints/AI_Assignment_1-checkpoint.ipynb" deleted file mode 100644--- "a/assignment-1/assignment_1/.ipynb_checkpoints/AI_Assignment_1-checkpoint.ipynb" +++ /dev/null @@ -1,1182 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "id": "Ff0nasoRGGbR", - "tags": [] - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "#import jax" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "0B5TJR9BZbM9", - "tags": [] - }, - "source": [ - "# Question 1" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "1q0PuluDUsXD", - "tags": [] - }, - "source": [ - "## Question 1a" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "I7NKm5-Ewj5N" - }, - "source": [ - "Sum of bernoulli random variables is equal to binomial distribution, so that's what's being used here" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "0GgQD7nPpRRk" - }, - "source": [ - "Your job is to sample n=50 posts" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "y8U2pgoYGMvm", - "outputId": "7e4f28c7-f2c9-4349-81cf-f29dd73e2ff8", - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "22" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "n = 50\n", - "p = 0.5\n", - "y = np.random.binomial(n=n, p=p)\n", - "samples = np.concatenate((np.zeros(y), np.ones(n-y)))\n", - "y" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "moP7bGGppWAz" - }, - "source": [ - "\n", - "and estimate the approval rate of the CEO by considering the statistics of the approval rate of the CEO by considering the statistics of $y = \\Sigma_{i=0}^{n}x_i$. \n", - "\n", - "Statistics: \n", - "- $\\bar{x}=\\frac{Σ_{i=0}^{n}x_i}{n}$\n", - "- $\\sigma^2=\\frac{Σ_{i=0}^{n}(x_i-\\bar{x})^2}{n-1}→\\sigma=\\sqrt{\\frac{Σ_{i=0}^{n}(x_i-\\bar{x})^2}{n-1}}$ " - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "A0th2VLVUsAd", - "outputId": "36f67974-5f36-45bd-aa8f-9f3ca5780332", - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "sample mean \"xbar\" is: 0.44\n", - "sample stdev \"S\" is: 0.515870573864794\n" - ] - } - ], - "source": [ - "xbar = y/n\n", - "print(f\"sample mean \\\"xbar\\\" is: {xbar}\")\n", - "#\n", - "S = np.sqrt(np.sum([(xi - xbar)**2 for xi in samples])/(n-1))\n", - "print(f\"sample stdev \\\"S\\\" is: {S}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "MC63GJqFqk_p" - }, - "source": [ - "Probability that 25 employees approve of the CEO: $P(y=25)= {50 \\choose 25}p^k (1-p)^{(n-k)}$" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "SnT5Kr1tX5vr", - "outputId": "ae9d0942-e86b-45e3-ca58-ee37a69f8c3d", - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.11227517265921705" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# What is the probability that 25 employees approve the CEO?\n", - "k = 25\n", - "(choose := (np.math.factorial(n)/(np.math.factorial(n-k)*np.math.factorial(k))))*(p**k)*((1-p)**(n-k))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "CcIhV6T8RH4t", - "tags": [] - }, - "source": [ - "## Question 1b" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "3PfFNMf2Yqxb" - }, - "source": [ - "$z = \\frac{y-\\mu_y}{\\sigma_y}$, by central limit theorem implies that $z \\sim \\mathcal{N}(\\mu_y, \\sigma^2_y)$ where $\\mu_y = 0 \\land \\sigma_y^2 = 1$. This gives that $(P(y = 25/50)|Y\\sim\\mathcal{B}(n,p)) ≃ = P(\\frac{24.5 - 25} \\leq z=\\frac{25/50 - 0}{\\sqrt{1}} \\geq 25.5)$ \n", - "\n", - "We find then the probability of that interval:" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(-0.1414213562373095, 0.1414213562373095)" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "mu = p*n\n", - "sigma = np.sqrt(p*(1-p)*n)\n", - "a = (24.5 - mu)/sigma\n", - "b = (25.5 - mu)/sigma\n", - "(a,b)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.11246291601828484\n" - ] - } - ], - "source": [ - "from scipy.stats import norm\n", - "\n", - "final_probability = norm.cdf(b) - norm.cdf(a)\n", - "print(final_probability)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "DItcIeMWnmOu", - "tags": [] - }, - "source": [ - "# Question 2" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "f1k2hmfqoU47" - }, - "source": [ - "This can be represented as a joint probability mass function, where Y is the urn from which the ball is drawn. \n", - "\n", - "- $P(X=1|Y=0)=2/3$\n", - "- $P(X=1|Y=1)=1/6$ \n", - " \n", - "We also know that $P(Y=1)=1/2$. \n", - "This gives us all the joint probability distributions:\n", - "- $P(X=1, Y=1) = 1/6 * 1/2$\n", - "- $P(X=0, Y=1) = 5/6 * 1/2$\n", - "- $P(X=1, Y=0) = 2/3 * 1/2$\n", - "- $P(X=0, Y=0) = 1/3 * 1/2$ \n", - " \n", - "To obtain the result 0011, we consider first the probability of drawing a 0\n", - " \n", - "- (0)011 \n", - "$P(X=0) = P(X=0,Y=0) + P(X=0,Y=1)$, the marginal probability $5/6*1/2 + 1/3*1/2$.\n", - "\n", - "- 0(0)11\n", - "Now, for the next draw, we know we drew a 0. This indicates that we must draw from urn 0 for the next draw. This means that the next draw of 0 is $P(X=0|Y=0)=1/3$.\n", - "\n", - "- 00(1)1 \n", - "Following the rule, we must again draw from urn 0, but this time we must draw a 1: $P(X=1|Y=0)=2/3$\n", - "\n", - "- 001(1) \n", - "We drew a 1 in the previous turn, so this final draw must be from urn 1. $P(X=1|Y=1)=1/6$\n", - "\n", - "In total, all these events must happen together, so we multiply their probabilities: $P(X=0)×P(X=0|Y=0)×P(X=1|Y=0)×P(X=1|Y=1)$" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "-vEl2wTCvIQF", - "outputId": "09f0344c-bf6d-4abb-9c29-905fc399a06a", - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.021604938271604937" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "((5/6*1/2)+(1/3*1/2))*(1/3)*(2/3)*(1/6)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "g4Yn-ERDy9dT", - "tags": [] - }, - "source": [ - "# Question 3" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "Bl2M44nqzAKz" - }, - "source": [ - "Bivariate normal distribution is given with $p(x_1, x_2)=\\mathcal{N}(\\begin{bmatrix} 0\\\\ 2 \\end{bmatrix}, \\begin{bmatrix} 0.3, -1\\\\ -1, 5 \\end{bmatrix})$, so we start by defining those constants." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "id": "v9WlFxMyy_Ax", - "tags": [] - }, - "outputs": [], - "source": [ - "mu = np.array([0, 2])\n", - "sigma = np.array([[0.3, -1],[-1, 5]])" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "EJivuKo0jjHi" - }, - "source": [ - "From the textbook we know that to sample a multivariate gaussian distribution, we can use the cholesky decomposition of the covariance matrix ($\\boldsymbol{\\Sigma}$) to obtain a lower left triangular matrix s.t. $\\boldsymbol{A} \\boldsymbol{A}^T=\\boldsymbol{\\Sigma}$. This allows us to obtain a sample that is multivariate normally distributed around $\\mu=0$ after finding the product of the matrix $\\boldsymbol{A}$ with a column vector of appropriate size of normally distributed gaussian random variables with mean $\\mu=0$ and variance $\\sigma^2=1$. This transforms the sample from the multinomial distribution $\\mathcal{N}(\\boldsymbol{0}, \\boldsymbol{I})$ to one in $\\mathcal{N}(\\boldsymbol{0}, \\boldsymbol{\\Sigma})$. Following that, adding the existing mean vector $\\boldsymbol{\\mu}$ shifts the means of the newly obtained distribution to the desired location, giving $\\mathcal{N}(\\boldsymbol{\\mu}, \\boldsymbol{\\Sigma})$" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "id": "hS7OFA0fyF7D", - "tags": [] - }, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt\n", - "import pandas as pd\n", - "\n", - "def sample_multinomial_gaussian(mu=mu, sigma=sigma):\n", - " A_mat = np.linalg.cholesky(sigma)\n", - " x_vec = np.random.normal(size=2)\n", - " y_vec = mu + np.dot(A_mat, x_vec)\n", - " return y_vec\n", - "\n", - "samples = pd.DataFrame([sample_multinomial_gaussian() for x in range(5000)])" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 282 - }, - "id": "-3c4Q47uyIbt", - "outputId": "9274520d-4f85-4db5-824a-0aa9e13cfd53", - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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iYioE9G69kwo6DlHRW1szEhERJ1GuOu8kDgl929Ni9QRERFFEs5eRAcGL0RE1KnodYcNXcGu0kRERKQrDF6IiIhIVxi8EBERka4weCEiIiJdYfBCREREusLghYiIiHSFwQsRERHpCoMXIiIi0hUGL0RERKQrDF6IiIhIVxi8EBERka4weCEiIiJdYfBCREREusLghYiIiHSFwQsRERHpCoMXIiIi0hUGL0RERKQrDF6IiIhIVxi8EBERka4weCEiIiJd6RLuARAREVFksjucOFB9BqfPNaN7SgKG905HjNEQ7mExeCEiIqKOiivqsHxrJeqsza7nskwJWDo5FxPyssI4Mi4bERERkZfiijrM3ljmEbgAgMXajNkby1BcURemkbVj8EJEREQudocTy7dWwunje8Jzy7dWwu7wdURoMHghIiIilwPVZzrMuLhzAqizNuNA9ZnQDcoLgxciIiJyOX1OPHAJ5DgtMHghIiIil+4pCaoepwUGL0REROQyvHc6skwJENsQbUD7rqPhvdNDOSwPDF6IiIjIJcZowNLJuQDQIYARHi+dnBvWei8MXoiIiMjDhLwsrL1/KMwmz6UhsykBa+8fGvY6LyxSR0RERB1MyMvCuFwzK+wSERGRfsQYDRjZNyPcw+hAk2Wjjz76CAaDwefXJ598Inrerbfe2uH4Rx55RIshEhERkU5pMvMyatQo1NV5lg5esmQJSkpK8L3vfU/y3FmzZuGpp55yPU5KStJiiERERKRTmgQvcXFxMJvNrsdtbW3YsmULHn30URgM0mtlSUlJHucSERERuQvJbqP33nsPDQ0NmDFjht9jX3vtNWRmZiIvLw+LFy/GhQsXJI9vaWmBzWbz+CIiIqLoFZKE3VdeeQXjx4/HNddcI3ncvffei169eqFnz574/PPPsXDhQhw5cgTvvPOO6DlFRUVYvny52kMmIiKiCGVwOp2y20IuWrQIK1eulDzm8OHDGDBggOvxt99+i169euGtt97C1KlTFQ1ux44duO2223Ds2DH07dvX5zEtLS1oaWlxPbbZbMjOzobVakVqaqqi1yMiIqLwsNlsMJlMsu7fimZeFixYgOnTp0se06dPH4/H69evR0ZGBqZMmaLkpQAA+fn5ACAZvMTHxyM+Pl7xtYmIiEifFAUv3bp1Q7du3WQf73Q6sX79ejzwwAOIjY1VPLjy8nIAQFZWeCv5ERERUeTQNGF3x44dqK6uxsMPP9zhe7W1tRgwYAAOHDgAAKiqqsKKFStw8OBB1NTU4L333sMDDzyAW265BYMGDdJymERERKQjmibsvvLKKxg1apRHDoygra0NR44cce0miouLw/bt2/Hcc8+hqakJ2dnZmDp1Kp588klFrymk8HDXERERkX4I9205qbiKEnb14Ntvv0V2dna4h0FEREQB+Oabb/zuTo664MXhcODkyZNISUnxWxBPD4TdU9988w13T+kEf2f6wt+X/vB3pi9yf19OpxPnzp1Dz549YTRKZ7VEXWNGo9HoN2LTo9TUVP4j1Rn+zvSFvy/94e9MX+T8vkwmk6xrhaTCLhEREZFaGLwQERGRrjB4iXDx8fFYunQpC/HpCH9n+sLfl/7wd6YvWvy+oi5hl4iIiKIbZ16IiIhIVxi8EBERka4weCEiIiJdYfBCREREusLgRSdqamowc+ZM9O7dG4mJiejbty+WLl2K1tbWcA+NJPzud7/DqFGjkJSUhLS0tHAPh3xYs2YNcnJykJCQgPz8fFezWIo8u3btwuTJk9GzZ08YDAa8++674R4SSSgqKsLNN9+MlJQUdO/eHXfeeSeOHDmiyrUZvOjEl19+CYfDgRdffBFffPEFVq1ahRdeeAFPPPFEuIdGElpbW/GTn/wEs2fPDvdQyIc333wT8+fPx9KlS1FWVobBgwdj/PjxOH36dLiHRj40NTVh8ODBWLNmTbiHQjJ8/PHHmDNnDvbt24dt27ahra0Nt99+O5qamoK+NrdK69gzzzyDtWvX4uuvvw73UMiPDRs24PHHH0djY2O4h0Ju8vPzcfPNN2P16tUA2nujZWdn49FHH8WiRYvCPDqSYjAYsHnzZtx5553hHgrJ9N1336F79+74+OOPccsttwR1Lc686JjVakV6enq4h0GkS62trTh48CAKCwtdzxmNRhQWFqK0tDSMIyOKTlarFQBUuW8xeNGpY8eO4c9//jN+9rOfhXsoRLpUX18Pu92OHj16eDzfo0cPWCyWMI2KKDo5HA48/vjjKCgoQF5eXtDXY/ASZosWLYLBYJD8+vLLLz3Oqa2txYQJE/CTn/wEs2bNCtPIO69AfmdERJ3ZnDlzUFFRgTfeeEOV63VR5SoUsAULFmD69OmSx/Tp08f13ydPnsSYMWMwatQovPTSSxqPjnxR+jujyJSZmYmYmBicOnXK4/lTp07BbDaHaVRE0Wfu3Ll4//33sWvXLlxzzTWqXJPBS5h169YN3bp1k3VsbW0txowZg2HDhmH9+vUwGjlxFg5KfmcUueLi4jBs2DCUlJS4kj4dDgdKSkowd+7c8A6OKAo4nU48+uij2Lx5Mz766CP07t1btWszeNGJ2tpa3HrrrejVqxeeffZZfPfdd67v8VNi5Dpx4gTOnDmDEydOwG63o7y8HADQr18/XHXVVeEdHGH+/Pl48MEH8b3vfQ/Dhw/Hc889h6amJsyYMSPcQyMfzp8/j2PHjrkeV1dXo7y8HOnp6bj22mvDODLyZc6cOdi0aRO2bNmClJQUVy6ZyWRCYmJicBd3ki6sX7/eCcDnF0WuBx980OfvbOfOneEeGl325z//2Xnttdc64+LinMOHD3fu27cv3EMiETt37vT57+nBBx8M99DIB7F71vr164O+Nuu8EBERka4waYKIiIh0hcELERER6QqDFyIiItIVBi9ERESkKwxeiIiISFcYvBAREZGuMHghIiIiXWHwQkRERLrC4IWIiIh0hcELERER6QqDFyIiItIVBi9ERESkK/8f3I7facd95+wAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "%matplotlib inline\n", - "\n", - "\n", - "plt.scatter(samples[0], samples[1])" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "oRz9ySAb1B4V", - "tags": [] - }, - "source": [ - "# Question 4" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 1. " - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "metadata": { - "id": "ApgjWiqN1DMe", - "tags": [] - }, - "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", - "
Unnamed: 0DateDayHigh Temp (°F)Low Temp (°F)PrecipitationBrooklyn BridgeManhattan BridgeWilliamsburg BridgeQueensboro BridgeTotal
002016-04-01 00:00:002016-04-01 00:00:0078.166.00.011704.031264115.02552.011497
112016-04-02 00:00:002016-04-02 00:00:0055.048.90.15827.016462565.01884.06922
222016-04-03 00:00:002016-04-03 00:00:0039.934.00.09526.012321695.01306.04759
332016-04-04 00:00:002016-04-04 00:00:0044.133.10.47 (S)521.010671440.01307.04335
442016-04-05 00:00:002016-04-05 00:00:0042.126.101416.026173081.02357.09471
\n", - "
" - ], - "text/plain": [ - " Unnamed: 0 Date Day High Temp (°F) \\\n", - "0 0 2016-04-01 00:00:00 2016-04-01 00:00:00 78.1 \n", - "1 1 2016-04-02 00:00:00 2016-04-02 00:00:00 55.0 \n", - "2 2 2016-04-03 00:00:00 2016-04-03 00:00:00 39.9 \n", - "3 3 2016-04-04 00:00:00 2016-04-04 00:00:00 44.1 \n", - "4 4 2016-04-05 00:00:00 2016-04-05 00:00:00 42.1 \n", - "\n", - " Low Temp (°F) Precipitation Brooklyn Bridge Manhattan Bridge \\\n", - "0 66.0 0.01 1704.0 3126 \n", - "1 48.9 0.15 827.0 1646 \n", - "2 34.0 0.09 526.0 1232 \n", - "3 33.1 0.47 (S) 521.0 1067 \n", - "4 26.1 0 1416.0 2617 \n", - "\n", - " Williamsburg Bridge Queensboro Bridge Total \n", - "0 4115.0 2552.0 11497 \n", - "1 2565.0 1884.0 6922 \n", - "2 1695.0 1306.0 4759 \n", - "3 1440.0 1307.0 4335 \n", - "4 3081.0 2357.0 9471 " - ] - }, - "execution_count": 66, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import pandas as pd\n", - "\n", - "df = pd.read_csv('../data/01_raw/nyc-east-river-bicycle-counts.csv')\n", - "df.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "metadata": { - "tags": [] - }, - "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", - "
DateBrooklyn Bridge
02016-04-01 00:00:0011928.0
12016-04-02 00:00:005789.0
22016-04-03 00:00:003682.0
32016-04-04 00:00:003647.0
42016-04-05 00:00:009912.0
\n", - "
" - ], - "text/plain": [ - " Date Brooklyn Bridge\n", - "0 2016-04-01 00:00:00 11928.0\n", - "1 2016-04-02 00:00:00 5789.0\n", - "2 2016-04-03 00:00:00 3682.0\n", - "3 2016-04-04 00:00:00 3647.0\n", - "4 2016-04-05 00:00:00 9912.0" - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "chunked_dataset = df[['Date', 'Brooklyn Bridge']].groupby('Date').sum().reset_index(drop=False)\n", - "chunked_dataset.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "image/png": "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Fri2+/j4KCsrS08++aR8fHw0efLki85JQECAIiMjFRkZqQ4dOuixxx7T/v37dfjwYUnlv/WzdetW3XHHHQoJCVFwcLC6du2q3bt3a9myZapZs6by8vLcbmPcuHHq2rWra3nFihXq0aOHatWqpbp16yo5OfmiBbOoqEgTJ07Uddddp9q1aysxMVFLliy56P0pFRwcrMjISF1//fV69NFHVa9ePX3++eeu7eW99TN16lQ1bNhQwcHBGjlypM6cOVNmv6+//rpatWqlwMBAtWzZ0u1IR+lcvffee+revbsCAwP19ttva9++ferfv7/q1q2r2rVrq02bNvrkk08umb9WrVqu/JMnT1azZs308ccfS5J++OEHPfDAA2rQoIFCQkJ06623auPGja7rlj7OX3/9dcXHxyswMPCStxUREaHIyEg1b95c99xzj1asWKEGDRrowQcfdI1Zu3atbrvtNoWHhys0NFTdu3fX119/7dp+//33uxVc6UJJi4iI0BtvvHHJ2wfKQ1HBNcfX11fPPvus/v73v+u77777WftatGiRDhw4oGXLlmn69OlKS0vTHXfcobp162r16tUaPXq0fve735W5nUmTJmnChAlav369kpKS1L9/fx05ckTShReXW2+9VTfccIPWrVunBQsW6ODBg7r77rvd9vHmm2/K399fK1as0Msvv1xuvhdffFHPP/+8/vKXv2jTpk1KTk7Wr371K+3cuVOSlJubqzZt2mjChAnKzc3VxIkTK3S/CwsL9a9//UtNmza96FGY77//Xt26dVNAQIAWLVqkrKws3X///Tp//ry6deum66+/Xm+99ZZr/Llz5/T222/r/vvvlyRt2LBBPXv2VOvWrbVy5UotX75c/fv3V3Fxcbm39/DDD2vlypWaPXu2Nm3apF//+tfq06eP675eTklJiT744AMdO3ZM/v7+Fx33/vvva/LkyXr22We1bt06RUVFlXm75e2339YTTzyhZ555Rtu2bdOzzz6rP/3pT3rzzTfdxj322GMaO3astm3bpuTkZKWkpKioqEjLli3T5s2bNW3aNNWpU6dC+UsFBQW5joz8+te/1qFDhzR//nxlZWWpY8eO6tmzp44ePeoav2vXLn3wwQeaO3dupc8vCgoK0ujRo7VixQodOnRIknTixAkNGzZMy5cv16pVq9SsWTP169dPJ06ckCQ98MAD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MkXp6en629/+ph07dmjz5s3KyMjQ9OnTL3nb48aN06effqo9e/bo66+/1uLFi10FtrJ69eqlpKQkDRw4UJ999pn27t2rr776So8//vhF79vlHDp0SHl5edq5c6dmz56tLl26KD8/XzNnznSNadasmd566y1t27ZNq1ev1pAhQ8o9OvbAAw+43nodNmyYR3kAiaKCauDJJ58s89ZMq1at9NJLL2nGjBlq37691qxZU+FPxFTE1KlTNXXqVLVv317Lly/Xxx9/7PpfbulRkOLiYvXu3VsJCQkaN26cwsLC3P7HXBFjxozR+PHjNWHCBCUkJGjBggX6+OOP1axZs0pnXrBggaKiohQVFaXExEStXbtWc+bMUY8ePcodX79+fS1atEiFhYXq3r27OnXqpNdee83trbEaNWpo+PDhKi4u1tChQ92u37x5c3322WfauHGjbrrpJiUlJemjjz666Pe0ZGRkaOjQoZowYYJatGihgQMHau3atYqNja3U/WzdurV69+6tJ554otztgwYN0p/+9Cc98sgj6tSpk/bt2+f28Vzpwovw66+/royMDCUkJKh79+7KzMy87BGV4uJipaSkqFWrVurTp4+aN2/u8Re4+fj46JNPPlG3bt00YsQI10eK9+3bp4YNG3q0zxYtWig6OlqdOnXS1KlT1atXL23ZssXtCN0bb7yhY8eOqWPHjvrNb36jMWPGlPs9NL169VJUVJSSk5MVHR3tUR5AknzMT9+oBwAvGjlypA4fPuz67g9UD4WFhbruuuuUkZGhu+66y+k4uIpxMi2AK+L48ePavHmz3nnnHUpKNVJSUqL8/Hw9//zzCgsL069+9SunI+EqR1EBcEUMGDBAa9as0ejRo3Xbbbc5HQdVJCcnR/Hx8WrUqJEyMzOvup9cgH146wcAAFiLk2kBAIC1KCoAAMBaFBUAAGAtigoAALAWRQUAAFiLogIAAKxFUQEAANaiqAAAAGv9P5Vrm64T2FFYAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import seaborn as sns\n", - "import matplotlib.pyplot as plt\n", - "\n", - "fig = sns.histplot(chunked_dataset[\"Brooklyn Bridge\"], bins=10)\n", - "plt.xlabel(\"Number of Bicycle Riders Per Day\")\n", - "plt.ylabel(\"Frequency\")\n", - "plt.show(fig)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 2." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For poisson distribution, seek to extract existing sample parameters and simulate them. \n", - "\n", - "Find that the only parameter is $\\lambda$ which is the mean number of events" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "2269.633333333333" - ] - }, - "execution_count": 76, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pois_lambda = df['Brooklyn Bridge'].mean()\n", - "pois_lambda" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "2264.4666666666667" - ] - }, - "execution_count": 77, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "def sample_poisson():\n", - " return np.random.poisson(lam=pois_lambda)\n", - "\n", - "samples = [sample_poisson() for _ in range(chunked_dataset.shape[0])]\n", - "pd.Series(samples).mean()" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjUAAAGwCAYAAABRgJRuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA0xklEQVR4nO3deXhU9b3H8U8gEJKQsCWBUBJI2TdBUGnKLkgApaL3WopQdm5VFCiLmttHEVQC9oLSiqAoCdoiSgWLrYCyVwTZIdCwL0EJQhAJYRkg+d0/vJnLkASSycBhfrxfzzPPwznnN+d8v3PmZD6cOTMTYIwxAgAA8HOlnC4AAADAFwg1AADACoQaAABgBUINAACwAqEGAABYgVADAACsQKgBAABWCHS6gJLIzc3VsWPHFBYWpoCAAKfLAQAARWCM0dmzZ1W9enWVKuW78yt+HWqOHTummJgYp8sAAABeOHr0qGrUqOGz9fl1qAkLC5P004MSHh7ucDUAAKAosrKyFBMT434d9xW/DjV5bzmFh4cTagAA8DO+vnSEC4UBAIAVCDUAAMAKhBoAAGAFQg0AALACoQYAAFiBUAMAAKxAqAEAAFYg1AAAACsQagAAgBUINQAAwAqEGgAAYAVHQ02tWrUUEBCQ7zZs2DAnywIAAH7I0R+03Lhxo3JyctzTO3fu1AMPPKDHHnvMwaoAAIA/cjTUREZGekxPmjRJtWvXVvv27R2qCAAA+CtHQ83VLl26pL/85S8aNWpUoT9F7nK55HK53NNZWVm3qjzAQ3p6ujIzM50uo1giIiIUGxvrdBkAcNPcNqHm008/1Y8//qgBAwYUOiYpKUnjx4+/dUUBBUhPT1eDBg114cJ5p0spluDgEO3enUawAWCtAGOMcboISUpISFDZsmX12WefFTqmoDM1MTExOnPmjMLDw29FmYC2bNmili1bqtWgcQqPruV0OUWSlXFY38wer82bN6tFixZOlwPgDpeVlaUKFSr4/PX7tjhTc+TIES1btkwLFiy47rigoCAFBQXdoqqA6wuPrqXKsfWdLgMA8H9ui++pSU5OVlRUlB588EGnSwEAAH7K8VCTm5ur5ORk9e/fX4GBt8WJIwAA4IccDzXLli1Tenq6Bg0a5HQpAADAjzl+aqRLly66Ta5VBgAAfszxMzUAAAC+QKgBAABWINQAAAArEGoAAIAVCDUAAMAKhBoAAGAFQg0AALACoQYAAFiBUAMAAKxAqAEAAFYg1AAAACsQagAAgBUINQAAwAqEGgAAYAVCDQAAsAKhBgAAWIFQAwAArECoAQAAViDUAAAAKxBqAACAFQg1AADACoQaAABgBUINAACwAqEGAABYgVADAACsQKgBAABWINQAAAArEGoAAIAVCDUAAMAKhBoAAGAFQg0AALACoQYAAFiBUAMAAKxAqAEAAFYg1AAAACsQagAAgBUINQAAwAqEGgAAYAVCDQAAsILjoea7775T3759VaVKFQUHB6tp06batGmT02UBAAA/E+jkxk+fPq3WrVurY8eOWrx4sSIjI7Vv3z5VqlTJybIAAIAfcjTUTJ48WTExMUpOTnbPi4uLc7AiAADgrxx9+2nRokW655579NhjjykqKkp33323Zs2aVeh4l8ulrKwsjxsAAIDkcKg5ePCgZsyYobp162rp0qV68sknNXz4cM2ZM6fA8UlJSapQoYL7FhMTc4srBgAAtytHQ01ubq5atGihiRMn6u6779Z//dd/aejQoZo5c2aB4xMTE3XmzBn37ejRo7e4YgAAcLtyNNRER0erUaNGHvMaNmyo9PT0AscHBQUpPDzc4wYAACA5HGpat26tPXv2eMzbu3evatas6VBFAADAXzkaan7/+99r/fr1mjhxovbv36+5c+fqnXfe0bBhw5wsCwAA+CFHQ829996rhQsX6sMPP1STJk308ssv64033lCfPn2cLAsAAPghR7+nRpIeeughPfTQQ06XAQAA/JzjP5MAAADgC4QaAABgBUINAACwAqEGAABYgVADAACsQKgBAABWINQAAAArEGoAAIAVCDUAAMAKhBoAAGAFQg0AALACoQYAAFiBUAMAAKxAqAEAAFYg1AAAACsQagAAgBUINQAAwAqEGgAAYAVCDQAAsAKhBgAAWIFQAwAArECoAQAAViDUAAAAKxBqAACAFQg1AADACoQaAABgBUINAACwAqEGAABYgVADAACsQKgBAABWINQAAAArEGoAAIAVCDUAAMAKhBoAAGAFQg0AALACoQYAAFiBUAMAAKxAqAEAAFYg1AAAACsQagAAgBUcDTUvvfSSAgICPG4NGjRwsiQAAOCnAp0uoHHjxlq2bJl7OjDQ8ZIAAIAfcjxBBAYGqlq1akUa63K55HK53NNZWVk3qywA8Ep6eroyMzOdLqNYIiIiFBsb63QZQIk5Hmr27dun6tWrq1y5coqPj1dSUlKhB1dSUpLGjx9/iysEgKJJT09XgwYNdeHCeadLKZbg4BDt3p1GsIHfczTUtGrVSikpKapfv74yMjI0fvx4tW3bVjt37lRYWFi+8YmJiRo1apR7OisrSzExMbeyZAAoVGZmpi5cOK9Wg8YpPLqW0+UUSVbGYX0ze7wyMzMJNfB7joaabt26uf991113qVWrVqpZs6Y+/vhjDR48ON/4oKAgBQUF3coSAaDYwqNrqXJsfafLAO44t9VHuitWrKh69epp//79TpcCAAD8zG0VarKzs3XgwAFFR0c7XQoAAPAzjoaaMWPGaPXq1Tp8+LC+/vprPfLIIypdurR69+7tZFkAAMAPOXpNzbfffqvevXvr1KlTioyMVJs2bbR+/XpFRkY6WRYAAPBDjoaaefPmObl5AABgkdvqmhoAAABvEWoAAIAVCDUAAMAKhBoAAGAFQg0AALACoQYAAFiBUAMAAKxAqAEAAFYg1AAAACsQagAAgBUINQAAwAqEGgAAYAVCDQAAsAKhBgAAWIFQAwAArECoAQAAViDUAAAAKxBqAACAFQg1AADACoQaAABgBUINAACwAqEGAABYgVADAACsQKgBAABWINQAAAArEGoAAIAVCDUAAMAKXoWagwcP+roOAACAEvEq1NSpU0cdO3bUX/7yF128eNHXNQEAABSbV6Fmy5YtuuuuuzRq1ChVq1ZNv/vd77RhwwZf1wYAAFBkXoWa5s2ba9q0aTp27Jhmz56tjIwMtWnTRk2aNNHUqVN18uRJX9cJAABwXSW6UDgwMFCPPvqo5s+fr8mTJ2v//v0aM2aMYmJi1K9fP2VkZPiqTgAAgOsqUajZtGmTnnrqKUVHR2vq1KkaM2aMDhw4oC+//FLHjh3Tww8/7Ks6AQAArivQmztNnTpVycnJ2rNnj7p37673339f3bt3V6lSP2WkuLg4paSkqFatWr6sFQAAoFBehZoZM2Zo0KBBGjBggKKjowscExUVpffee69ExQEAABSVV6Fm3759NxxTtmxZ9e/f35vVAwAAFJtX19QkJydr/vz5+ebPnz9fc+bMKXFRAAAAxeVVqElKSlJERES++VFRUZo4cWKJiwIAACgur0JNenq64uLi8s2vWbOm0tPTS1wUAABAcXkVaqKiorRjx45887dv364qVap4VcikSZMUEBCgkSNHenV/AABwZ/Mq1PTu3VvDhw/XypUrlZOTo5ycHK1YsUIjRozQb37zm2Kvb+PGjXr77bd11113eVMOAACAd6Hm5ZdfVqtWrdSpUycFBwcrODhYXbp00f3331/sa2qys7PVp08fzZo1S5UqVfKmHAAAAO8+0l22bFl99NFHevnll7V9+3YFBweradOmqlmzZrHXNWzYMD344IPq3LmzXnnlleuOdblccrlc7umsrKxibw+4k6WlpTldQrFEREQoNjbW6TIA+AmvQk2eevXqqV69el7ff968edqyZYs2btxYpPFJSUkaP36819sD7lQXzpySFKC+ffs6XUqxBAeHaPfuNIINgCLxKtTk5OQoJSVFy5cv14kTJ5Sbm+uxfMWKFTdcx9GjRzVixAh9+eWXKleuXJG2m5iYqFGjRrmns7KyFBMTU7zigTvQ5fNnJRk1f/w5RcY1cLqcIsnKOKxvZo9XZmYmoQZAkXgVakaMGKGUlBQ9+OCDatKkiQICAoq9js2bN+vEiRNq0aKFe15OTo7WrFmjN998Uy6XS6VLl/a4T1BQkIKCgrwpGYCk8lGxqhxb3+kyAOCm8CrUzJs3Tx9//LG6d+/u9YY7deqk1NRUj3kDBw5UgwYN9Nxzz+ULNAAAANfj9YXCderUKdGGw8LC1KRJE495oaGhqlKlSr75AAAAN+LVR7pHjx6tadOmyRjj63oAAAC84tWZmq+++korV67U4sWL1bhxY5UpU8Zj+YIFC7wqZtWqVV7dDwAAwKtQU7FiRT3yyCO+rgUAAMBrXoWa5ORkX9cBAABQIl5dUyNJV65c0bJly/T222/r7NmzkqRjx44pOzvbZ8UBAAAUlVdnao4cOaKuXbsqPT1dLpdLDzzwgMLCwjR58mS5XC7NnDnT13UCAABcl1dnakaMGKF77rlHp0+fVnBwsHv+I488ouXLl/usOAAAgKLy6kzNv/71L3399dcqW7asx/xatWrpu+++80lhAAAAxeHVmZrc3Fzl5OTkm//tt98qLCysxEUBAAAUl1ehpkuXLnrjjTfc0wEBAcrOzta4ceNK9NMJAAAA3vLq7acpU6YoISFBjRo10sWLF/X4449r3759ioiI0IcffujrGgEAAG7Iq1BTo0YNbd++XfPmzdOOHTuUnZ2twYMHq0+fPh4XDgMAANwqXoUaSQoMDFTfvn19WQsAAIDXvAo177///nWX9+vXz6tiAAAAvOVVqBkxYoTH9OXLl3X+/HmVLVtWISEhhBoAAHDLefXpp9OnT3vcsrOztWfPHrVp04YLhQEAgCO8/u2na9WtW1eTJk3KdxYHAADgVvBZqJF+unj42LFjvlwlAABAkXh1Tc2iRYs8po0xysjI0JtvvqnWrVv7pDAAAIDi8CrU9OzZ02M6ICBAkZGRuv/++zVlyhRf1AUAAFAsXoWa3NxcX9cBAABQIj69pgYAAMApXp2pGTVqVJHHTp061ZtNAAAAFItXoWbr1q3aunWrLl++rPr160uS9u7dq9KlS6tFixbucQEBAb6pEgAA4Aa8CjU9evRQWFiY5syZo0qVKkn66Qv5Bg4cqLZt22r06NE+LRIAAOBGvLqmZsqUKUpKSnIHGkmqVKmSXnnlFT79BAAAHOFVqMnKytLJkyfzzT958qTOnj1b4qIAAACKy6tQ88gjj2jgwIFasGCBvv32W3377bf65JNPNHjwYD366KO+rhEAAOCGvLqmZubMmRozZowef/xxXb58+acVBQZq8ODB+uMf/+jTAgEAAIrCq1ATEhKit956S3/84x914MABSVLt2rUVGhrq0+IAAACKqkRfvpeRkaGMjAzVrVtXoaGhMsb4qi4AAIBi8SrUnDp1Sp06dVK9evXUvXt3ZWRkSJIGDx7Mx7kBAIAjvAo1v//971WmTBmlp6crJCTEPb9Xr15asmSJz4oDAAAoKq+uqfniiy+0dOlS1ahRw2N+3bp1deTIEZ8UBgAAUBxenak5d+6cxxmaPD/88IOCgoJKXBQAAEBxeRVq2rZtq/fff989HRAQoNzcXL322mvq2LGjz4oDAAAoKq/efnrttdfUqVMnbdq0SZcuXdKzzz6rXbt26YcfftDatWt9XSMAAMANeXWmpkmTJtq7d6/atGmjhx9+WOfOndOjjz6qrVu3qnbt2r6uEQAA4IaKfabm8uXL6tq1q2bOnKk//OEPN6MmAACAYiv2mZoyZcpox44dN6MWAAAAr3n19lPfvn313nvv+boWAAAAr3l1ofCVK1c0e/ZsLVu2TC1btsz3m09Tp04t0npmzJihGTNm6PDhw5Kkxo0b68UXX1S3bt28KQsAANzBihVqDh48qFq1amnnzp1q0aKFJGnv3r0eYwICAoq8vho1amjSpEmqW7eujDGaM2eOHn74YW3dulWNGzcuTmkAAOAOV6xQU7duXWVkZGjlypWSfvpZhD/96U+qWrWqVxvv0aOHx/Srr76qGTNmaP369YQaAABQLMUKNdf+CvfixYt17tw5nxSSk5Oj+fPn69y5c4qPjy9wjMvlksvlck9nZWX5ZNuFSU9PV2Zm5k3dhq9FREQoNjbW6TIAn0lLS3O6hCLzp1oBG3l1TU2ea0OON1JTUxUfH6+LFy+qfPnyWrhwoRo1alTg2KSkJI0fP77E2yyK9PR0NWjQUBcunL8l2/OV4OAQ7d6dRrCB37tw5pSkAPXt29fpUortsuuS0yUAd6RihZqAgIB818wU5xqagtSvX1/btm3TmTNn9Le//U39+/fX6tWrCww2iYmJGjVqlHs6KytLMTExJdp+YTIzM3Xhwnm1GjRO4dG1bso2fC0r47C+mT1emZmZhBr4vcvnz0oyav74c4qMa+B0OUWSkbpOOxe9oytXrjhdCnBHKvbbTwMGDHD/aOXFixf1xBNP5Pv004IFC4q8zrJly6pOnTqSpJYtW2rjxo2aNm2a3n777Xxjg4KCbvkPZoZH11Ll2Pq3dJsA/l/5qFi/OQazMg47XQJwRytWqOnfv7/H9M04LZybm+tx3QwAAEBRFCvUJCcn+3TjiYmJ6tatm2JjY3X27FnNnTtXq1at0tKlS326HQAAYL8SXShcUidOnFC/fv2UkZGhChUq6K677tLSpUv1wAMPOFkWAADwQ46GGn5qAQAA+IpXv/0EAABwuyHUAAAAKxBqAACAFQg1AADACoQaAABgBUINAACwAqEGAABYgVADAACsQKgBAABWINQAAAArEGoAAIAVCDUAAMAKhBoAAGAFQg0AALACoQYAAFiBUAMAAKxAqAEAAFYg1AAAACsQagAAgBUINQAAwAqEGgAAYAVCDQAAsAKhBgAAWIFQAwAArECoAQAAViDUAAAAKxBqAACAFQg1AADACoQaAABgBUINAACwAqEGAABYgVADAACsQKgBAABWINQAAAArEGoAAIAVCDUAAMAKhBoAAGAFQg0AALACoQYAAFiBUAMAAKzgaKhJSkrSvffeq7CwMEVFRalnz57as2ePkyUBAAA/5WioWb16tYYNG6b169fryy+/1OXLl9WlSxedO3fOybIAAIAfCnRy40uWLPGYTklJUVRUlDZv3qx27drlG+9yueRyudzTWVlZN71Gf5SWluZ0CcXicrkUFBTkdBlF5m+PL1AU/va8joiIUGxsrNNlFFt6eroyMzOdLqNY/OmxdjTUXOvMmTOSpMqVKxe4PCkpSePHj7+VJfmVC2dOSQpQ3759nS6leAICJGOcrqLYLrsuOV0CUGL++ncjODhEu3en+c2LrfRToGnQoKEuXDjvdCnF4k+P9W0TanJzczVy5Ei1bt1aTZo0KXBMYmKiRo0a5Z7OyspSTEzMrSrxtnf5/FlJRs0ff06RcQ2cLqdIMlLXaeeid/yy5itXrjhdClBi/vh3IyvjsL6ZPV6ZmZl+8UKbJzMzUxcunFerQeMUHl3L6XKKxN8e69sm1AwbNkw7d+7UV199VeiYoKAgv3qbwinlo2JVOba+02UUSVbGYUn+WTNgE386Bv1deHQtHuub5LYINU8//bT+8Y9/aM2aNapRo4bT5QAAAD/kaKgxxuiZZ57RwoULtWrVKsXFxTlZDgAA8GOOhpphw4Zp7ty5+vvf/66wsDAdP35cklShQgUFBwc7WRoAAPAzjn5PzYwZM3TmzBl16NBB0dHR7ttHH33kZFkAAMAPOf72EwAAgC/w208AAMAKhBoAAGAFQg0AALACoQYAAFiBUAMAAKxAqAEAAFYg1AAAACsQagAAgBUINQAAwAqEGgAAYAVCDQAAsAKhBgAAWIFQAwAArECoAQAAViDUAAAAKxBqAACAFQg1AADACoQaAABgBUINAACwAqEGAABYgVADAACsQKgBAABWINQAAAArEGoAAIAVCDUAAMAKhBoAAGAFQg0AALACoQYAAFiBUAMAAKxAqAEAAFYg1AAAACsQagAAgBUINQAAwAqEGgAAYAVCDQAAsAKhBgAAWIFQAwAArECoAQAAViDUAAAAKzgaatasWaMePXqoevXqCggI0KeffupkOQAAwI85GmrOnTunZs2aafr06U6WAQAALBDo5Ma7deumbt26FXm8y+WSy+VyT2dlZd2MsgAAgB/yq2tqkpKSVKFCBfctJibG6ZIAAMBtwq9CTWJios6cOeO+HT161OmSAADAbcLRt5+KKygoSEFBQU6XAQAAbkN+daYGAACgMIQaAABgBUfffsrOztb+/fvd04cOHdK2bdtUuXJlxcbGOlgZAADwN46Gmk2bNqljx47u6VGjRkmS+vfvr5SUFIeqAgAA/sjRUNOhQwcZY5wsAQAAWIJragAAgBUINQAAwAqEGgAAYAVCDQAAsAKhBgAAWIFQAwAArECoAQAAViDUAAAAKxBqAACAFQg1AADACoQaAABgBUINAACwAqEGAABYgVADAACsQKgBAABWINQAAAArEGoAAIAVCDUAAMAKhBoAAGAFQg0AALACoQYAAFiBUAMAAKxAqAEAAFYg1AAAACsQagAAgBUINQAAwAqEGgAAYAVCDQAAsAKhBgAAWIFQAwAArECoAQAAViDUAAAAKxBqAACAFQg1AADACoQaAABgBUINAACwAqEGAABYgVADAACsQKgBAABWuC1CzfTp01WrVi2VK1dOrVq10oYNG5wuCQAA+BnHQ81HH32kUaNGady4cdqyZYuaNWumhIQEnThxwunSAACAH3E81EydOlVDhw7VwIED1ahRI82cOVMhISGaPXu206UBAAA/Eujkxi9duqTNmzcrMTHRPa9UqVLq3Lmz1q1bl2+8y+WSy+VyT585c0aSlJWV5fPasrOzJUk/HNmjK64LPl//zZCVcUSSdOa7fSoTGOBwNUVDzbcGNd8a1HxrZB1PlyRt3rzZ/bfaH+zZs0eSn72u/N9jnZ2d7dPX2rx1GWN8ts68FTrmu+++M5LM119/7TF/7Nix5r777ss3fty4cUYSN27cuHHjxs2C29GjR32aKxw9U1NciYmJGjVqlHs6NzdXP/zwg6pUqaKAgPz/w8jKylJMTIyOHj2q8PDwW1mqY+60nunXbndav9Kd1zP92q2wfo0xOnv2rKpXr+7T7TkaaiIiIlS6dGl9//33HvO///57VatWLd/4oKAgBQUFecyrWLHiDbcTHh5+Rzx5rnan9Uy/drvT+pXuvJ7p124F9VuhQgWfb8fRC4XLli2rli1bavny5e55ubm5Wr58ueLj4x2sDAAA+BvH334aNWqU+vfvr3vuuUf33Xef3njjDZ07d04DBw50ujQAAOBHHA81vXr10smTJ/Xiiy/q+PHjat68uZYsWaKqVauWeN1BQUEaN25cvresbHan9Uy/drvT+pXuvJ7p1263ut8AY3z9eSoAAIBbz/Ev3wMAAPAFQg0AALACoQYAAFiBUAMAAKxw24eapKQk3XvvvQoLC1NUVJR69uzp/v2MPO+88446dOig8PBwBQQE6Mcff/RYvmrVKgUEBBR427hxoyTp8OHDBS5fv379rWpV0o37/eGHH/TMM8+ofv36Cg4OVmxsrIYPH+7+Haw86enpevDBBxUSEqKoqCiNHTtWV65c8RizatUqtWjRQkFBQapTp45SUlJuRYsefNHv9u3b1bt3b8XExCg4OFgNGzbUtGnTPLZT2HPg+PHjt6zXPL7axwX1M2/ePI8xtuzjlJSUQo/hEydOSLp99nFR/mb97ne/U+3atRUcHKzIyEg9/PDD2r17t8cYW45h6cb92nYMS0Xbx7Ycw9KN+71lx7BPf3ThJkhISDDJyclm586dZtu2baZ79+4mNjbWZGdnu8e8/vrrJikpySQlJRlJ5vTp0x7rcLlcJiMjw+M2ZMgQExcXZ3Jzc40xxhw6dMhIMsuWLfMYd+nSpVvZ7g37TU1NNY8++qhZtGiR2b9/v1m+fLmpW7eu+Y//+A/3Oq5cuWKaNGliOnfubLZu3Wo+//xzExERYRITE91jDh48aEJCQsyoUaPMv//9b/PnP//ZlC5d2ixZssTv+n3vvffM8OHDzapVq8yBAwfMBx98YIKDg82f//xn95iVK1caSWbPnj0e+zcnJ+eW9uurno0xRpJJTk726OfChQvu5Tbt4/Pnz+c7hhMSEkz79u3dY26XfVyUv1lvv/22Wb16tTl06JDZvHmz6dGjh4mJiTFXrlwxxth1DBelX9uO4aL0bIw9x3BR+r1Vx/BtH2qudeLECSPJrF69Ot+yvAfk2lBzrUuXLpnIyEgzYcIE97y8ULN161YfV1wy1+s3z8cff2zKli1rLl++bIwx5vPPPzelSpUyx48fd4+ZMWOGCQ8PNy6XyxhjzLPPPmsaN27ssZ5evXqZhISEm9BF0XnTb0Geeuop07FjR/d0UZ8bTvC2Z0lm4cKFhd7H5n184sQJU6ZMGfP++++7592u+7go/W7fvt1IMvv37zfG2H8MX9tvQWw7hgvq2eZj+Eb7+GYdw7f920/XyjslXblyZa/XsWjRIp06darAby3+1a9+paioKLVp00aLFi3yehu+UpR+z5w5o/DwcAUG/vRdiuvWrVPTpk09vsAwISFBWVlZ2rVrl3tM586dPdaTkJCgdevW+bqFYvGm38LGFLSO5s2bKzo6Wg888IDWrl1b8oJ9oCQ9Dxs2TBEREbrvvvs0e/Zsmau+dsrmffz+++8rJCRE//mf/5lv2e22j2/U77lz55ScnKy4uDjFxMRIsvsYLqjfwtZjyzF8vZ5tPIaLso9v2jHsdRxyQE5OjnnwwQdN69atC1xe1JTXrVs3061bN495J0+eNFOmTDHr1683GzZsMM8995wJCAgwf//7331VfrHdqF9jfqo7NjbW/Pd//7d73tChQ02XLl08xp07d85IMp9//rkxxpi6deuaiRMneoz55z//aSSZ8+fP+7CLovO232utXbvWBAYGmqVLl7rn7d6928ycOdNs2rTJrF271gwcONAEBgaazZs3+7SH4ipJzxMmTDBfffWV2bJli5k0aZIJCgoy06ZNcy+3eR83bNjQPPnkkx7zbsd9fL1+p0+fbkJDQ40kU79+fY//0dp4DF+v32vZcgzfqGfbjuHi7OObdQz7Vah54oknTM2aNc3Ro0cLXF6UUHP06FFTqlQp87e//e2G2/vtb39r2rRp4225JXajfs+cOWPuu+8+07VrV49rf/z1D6K3/V4tNTXVREREmJdffvmG22vXrp3p27dviWouKV/0nOeFF14wNWrUcE/buo+//vprI8ls2rTphttzeh9fr98ff/zR7N2716xevdr06NHDtGjRwn09hY3H8PX6vZpNx3BRe87j78dwUfu9mcew34SaYcOGmRo1apiDBw8WOqYooWbChAkmMjKySBcAv/nmm6ZatWrelFtiN+o3KyvLxMfHm06dOuV70rzwwgumWbNmHvMOHjxoJJktW7YYY4xp27atGTFihMeY2bNnm/DwcJ/1UBwl6TfPrl27TFRU1HX/h3+1MWPGmF/84hde11xSvuj5av/4xz+MJHPx4kVjjJ372BhjBg0aZJo3b16kbTq5j4vyNyuPy+UyISEhZu7cucYYO4/hq13bbx7bjuGrFdbz1fz9GL7a9fq9mcfwbX9NjTFGTz/9tBYuXKgVK1YoLi6uROtKTk5Wv379VKZMmRuO37Ztm6Kjo73enjeK0m9WVpa6dOmismXLatGiRSpXrpzH8vj4eKWmpro/JidJX375pcLDw9WoUSP3mOXLl3vc78svv1R8fPxN6KpwvuhXknbt2qWOHTuqf//+evXVV4u0bSf2r+S7nq+1bds2VapUyf3DcbbtY0nKzs7Wxx9/rMGDBxdp27frMVzQfYwxcrlckuw7hgu6z9X9SvYdwwXd59qer+XPx3BB9ymo35t+DBc5/jjkySefNBUqVDCrVq3y+IjX1afeMjIyzNatW82sWbOMJLNmzRqzdetWc+rUKY91LVu2zEgyaWlp+baTkpJi5s6da9LS0kxaWpp59dVXTalSpczs2bNveo9Xu1G/Z86cMa1atTJNmzY1+/fv9xhz7cdBu3TpYrZt22aWLFliIiMjC/w46NixY01aWpqZPn26Ix8V9EW/qampJjIy0vTt29dj+YkTJ9zbef31182nn35q9u3bZ1JTU82IESNMqVKlzLJly25pv77qedGiRWbWrFkmNTXV7Nu3z7z11lsmJCTEvPjii+7t2LSP87z77rumXLlyBZ6NvV328Y36PXDggJk4caLZtGmTOXLkiFm7dq3p0aOHqVy5svn++++NMXYdw0Xp17ZjuCg923QMF6XfPDf7GL7tQ42kAm/JycnuMePGjbvhGGOM6d27t/nlL39Z4HZSUlJMw4YNTUhIiAkPDzf33XefmT9//k3srGA36jfvLbaCbocOHXKv5/Dhw6Zbt24mODjYREREmNGjR+f7eOzKlStN8+bNTdmyZc3Pf/7zfI/XreCLfgvb/zVr1nRvZ/LkyaZ27dqmXLlypnLlyqZDhw5mxYoVt7xfY3zT8+LFi03z5s1N+fLlTWhoqGnWrJmZOXNmvu9zsGUf54mPjzePP/54gdu5Xfbxjfr97rvvTLdu3UxUVJQpU6aMqVGjhnn88cfN7t27PdZjyzFclH5tO4aL0rNNx3BRn9PG3PxjOOD/CgYAAPBrt/01NQAAAEVBqAEAAFYg1AAAACsQagAAgBUINQAAwAqEGgAAYAVCDQAAsAKhBgAAWIFQA/jQ4cOHFRAQoG3btjlditvu3bv1i1/8QuXKlVPz5s29Xs+t7q1Dhw4aOXLkTd9OSkqKKlaseN0xL730UokeOwC3BqEGVhkwYIACAgI0adIkj/mffvqpAgICHKrKWePGjVNoaKj27NmT78fx8uQ9bnm3KlWqqGvXrtqxY4d7TExMjDIyMtSkSZNbVXqJ1apVy91TSEiImjZtqnfffddjTK9evbR3716HKry+Dh06uOsvV66cGjVqpLfeesvn21m1apV7O6VKlVKFChV0991369lnn1VGRobPtwfcLIQaWKdcuXKaPHmyTp8+7XQpPnPp0iWv73vgwAG1adNGNWvWVJUqVQod17VrV2VkZCgjI0PLly9XYGCgHnroIffy0qVLq1q1agoMDPS6FidMmDBBGRkZ2rlzp/r27auhQ4dq8eLF7uXBwcGKioq66XVcvnzZq/sNHTpUGRkZ+ve//61f//rXGjZsmD788EOv1nWj59GePXt07Ngxbdy4Uc8995yWLVumJk2aKDU11avtAbcaoQbW6dy5s6pVq6akpKRCxxT0dsIbb7yhWrVquacHDBignj17auLEiapataoqVqyoCRMm6MqVKxo7dqwqV66sGjVqKDk5Od/6d+/erV/+8pcqV66cmjRpotWrV3ss37lzp7p166by5curatWq+u1vf6vMzEz38g4dOujpp5/WyJEjFRERoYSEhAL7yM3N1YQJE1SjRg0FBQWpefPmWrJkiXt5QECANm/erAkTJiggIEAvvfRSoY9JUFCQqlWrpmrVqql58+Z6/vnndfToUZ08eVJSwW8/7dq1Sw899JDCw8MVFhamtm3b6sCBA1qzZo3KlCmj48ePe2xj5MiRatu2rXt67dq16tChg0JCQlSpUiUlJCQUGkZdLpfGjBmjn/3sZwoNDVWrVq20atWqQvvJExYWpmrVqunnP/+5nnvuOVWuXFlffvmle3lBbz9NmjRJVatWVVhYmAYPHqyLFy/mW++7776rhg0bqly5cmrQoIHHGZS8x+qjjz5S+/btVa5cOf31r3/VkSNH1KNHD1WqVEmhoaFq3LixPv/88+vWHxIS4q7/pZdeUt26dbVo0SJJ0o8//qghQ4YoMjJS4eHhuv/++7V9+3b3ffOe5++++67i4uJUrly5624rKipK1apVU7169fSb3/xGa9euVWRkpJ588kn3mI0bN+qBBx5QRESEKlSooPbt22vLli3u5YMGDfIIw9JPgS4qKkrvvffedbcPlBShBtYpXbq0Jk6cqD//+c/69ttvS7SuFStW6NixY1qzZo2mTp2qcePG6aGHHlKlSpX0zTff6IknntDvfve7fNsZO3asRo8era1btyo+Pl49evTQqVOnJP30QnT//ffr7rvv1qZNm7RkyRJ9//33+vWvf+2xjjlz5qhs2bJau3atZs6cWWB906ZN05QpU/Q///M/2rFjhxISEvSrX/1K+/btkyRlZGSocePGGj16tDIyMjRmzJgi9Z2dna2//OUvqlOnTqFnd7777ju1a9dOQUFBWrFihTZv3qxBgwbp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k5OVkpKigQMH+qQe4EYINbBa06ZN1adPH/3pT3/ymN+hQwedPHlSr732mg4cOKDp06d7fMy3pKZPn66FCxdq9+7dGjZsmE6fPu0+/T5s2DD98MMP6t27tzZu3KgDBw5o6dKlGjhwYKEXyRZm7Nixmjx5sj766CPt2bNHzz//vLZt26YRI0YUu2aXy6Xjx4/r+PHjSktL0zPPPOM+q1SQp59+WllZWfrNb36jTZs2ad++ffrggw+0Z88e95iEhASFh4frlVdeyffClpiYqI0bN+qpp57Sjh07tHv3bs2YMSPfC6Qk1atXT3369FG/fv20YMECHTp0SBs2bFBSUpL++c9/FqvPESNG6LPPPtOmTZsKXT579mwlJydr7969GjdunHbt2uUxZvz48UpKStKf/vQn7d27V6mpqUpOTtbUqVOvu+2RI0dq6dKlOnTokLZs2aKVK1e6w25xde7cWfHx8erZs6e++OILHT58WF9//bX+8Ic/FNrbjZw4cULHjx/Xvn37NG/ePLVu3VqZmZmaMWOGe0zdunX1wQcfKC0tTd9884369OlT4Fm3IUOGuN/+7d+/v1f1AMVFqIH1JkyYkO/toYYNG+qtt97S9OnT1axZM23YsKHInwwqikmTJmnSpElq1qyZvvrqKy1atMj9v+e8sys5OTnq0qWLmjZtqpEjR6pixYoe/xMviuHDh2vUqFEaPXq0mjZtqiVLlmjRokWqW7dusWtesmSJoqOjFR0drVatWmnjxo2aP3++OnToUOD4KlWqaMWKFcrOzlb79u3VsmVLzZo1y+PtuVKlSmnAgAHKyclRv379PO5fr149ffHFF9q+fbvuu+8+xcfH6+9//3uh34OTnJysfv36afTo0apfv7569uypjRs3KjY2tlh9NmrUSF26dNGLL75Y4PJevXrphRde0LPPPquWLVvqyJEjHh9pln56wX733XeVnJyspk2bqn379kpJSbnhmZqcnBwNGzZMDRs2VNeuXVWvXj2vv0wvICBAn3/+udq1a6eBAwe6P4Z95MgRVa1a1at11q9fX9WrV1fLli01adIkde7cWTt37vQ48/fee+/p9OnTatGihX77299q+PDhBX7PT+fOnRUdHa2EhARVr17dq3qA4gow115YAAA+NHjwYJ08edL93Sq4M2RnZ+tnP/uZkpOT9eijjzpdDu4QXCgM4KY4c+aMUlNTNXfuXALNHSQ3N1eZmZmaMmWKKlasqF/96ldOl4Q7CKEGwE3x8MMPa8OGDXriiSf0wAMPOF0ObpH09HTFxcWpRo0aSklJ8buf1YB/4+0nAABgBS4UBgAAViDUAAAAKxBqAACAFQg1AADACoQaAABgBUINAACwAqEGAABYgVADAACs8L/VBO89DVjvbQAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig2 = sns.histplot(samples, bins=10)\n", - "plt.xlabel(\"Number of Bicycle Riders Per Day\")\n", - "plt.ylabel(\"Frequency\")\n", - "plt.show(fig)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Question 5" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Need to simulate the behavior of M/M/1 queue and plot the number of requests that are waiting in the queue as a function of time. \n", - "\n", - "Axes of plot are y = Number of Requests, and x = Time\n", - "\n", - "Need to simulate the queue as a function of time. Given that arrival times are independent of service times, we can obtain a sample of exponentially distributed arrival times without the need for any other information. Then, given the number of arrivals, each arrival has a service time. The number of requests at a given time interval is then given as the number of arrival, service time completion pairs that are bisected by a given time t. " - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "lambda1, lambda2, lambda3 = (1, 3, 4)\n", - "mu = 4" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "import seaborn as sns\n", - "import pdb\n", - "\n", - "def MM1(lamb = lambda2, mu = mu, SIM_LENGTH = 2500000, SCALING_FACTOR = 0.001) -> pd.DataFrame:\n", - " queue = []\n", - " log = []\n", - " \n", - " time_of_arrival = 0\n", - " timedelta = np.random.exponential(1/lamb)\n", - " \n", - " # t here is a range of time [t, t+1)\n", - " for t in range(SIM_LENGTH):\n", - " while (SCALING_FACTOR * t) < time_of_arrival + timedelta < (SCALING_FACTOR * (t+1)):\n", - " time_of_arrival += timedelta\n", - " queue.append(\n", - " {\n", - " \"time of arrival\": time_of_arrival,\n", - " \"time of resolution\": np.NaN\n", - " }\n", - " )\n", - " timedelta = np.random.exponential(1/lamb)\n", - " \n", - " if len(queue) > 0: \n", - " if queue[0][\"time of resolution\"] is np.NaN:\n", - " queue[0][\"time of resolution\"] = (SCALING_FACTOR * t) + np.random.exponential(1/mu)\n", - " if (SCALING_FACTOR * t) > queue[0][\"time of resolution\"]:\n", - " queue.pop(0)\n", - " log.append({\"Time\": (SCALING_FACTOR * t), \"Number of Requests\": len(queue)})\n", - " return pd.DataFrame(log)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## $\\lambda=1$" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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OTlZCQkJGjRokAYPHqz09HRVV1dbnwoDAABwaADas2ePhg8fbl1OTk6WJCUkJCgrK0ulpaUqKSmxrr948aKeeOIJHT16VO3atVNoaKjef/99mznGjx+vEydOaM6cOSorK1N4eLiys7Pr3RgNAADMy2IYhuHoIlqayspKeXp66uzZs3a/HLZ3715FRkZqxG9WySsw5MobNNKpkkJtfTZR+fn5GjhwoN3mBQCgtbia39+t/h4gAACAq0UAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApkMAAgAApuPQALR9+3aNGjVK/v7+slgs2rhx42XHv/322xoxYoS6dOkiDw8PRUdHa/PmzTZj5s6dK4vFYtP69OnThHsBAABaG4cGoOrqaoWFhSkjI6NR47dv364RI0bo3XffVX5+voYPH65Ro0bp73//u824/v37q7S01No++uijpigfAAC0Ui6O/PD4+HjFx8c3enx6errN8sKFC/WXv/xFf/3rXxUREWHtd3Fxka+vr73KBAAAN5hWfQ9QXV2dzp07Jy8vL5v+gwcPyt/fXz169NDEiRNVUlJy2XlqampUWVlp0wAAwI2rVQeg559/XlVVVRo3bpy1LyoqSllZWcrOztby5ctVXFysoUOH6ty5c5ecJy0tTZ6entYWEBDQHOUDAAAHabUBaO3atZo3b57eeOMNde3a1dofHx+vsWPHKjQ0VLGxsXr33Xd15swZvfHGG5ecKyUlRWfPnrW2I0eONMcuAAAAB3HoPUDXat26dZoyZYrefPNNxcTEXHZsx44d1bt3bxUVFV1yjJubm9zc3OxdJgAAaKFa3Rmg119/XYmJiXr99dd17733XnF8VVWVDh06JD8/v2aoDgAAtAYOPQNUVVVlc2amuLhYBQUF8vLyUmBgoFJSUnT06FGtWbNG0veXvRISErRs2TJFRUWprKxMktS2bVt5enpKkp588kmNGjVK3bt317Fjx5SamipnZ2dNmDCh+XcQAAC0SA49A7Rnzx5FRERYH2FPTk5WRESE5syZI0kqLS21eYLr5Zdf1nfffafp06fLz8/P2mbMmGEd8/XXX2vChAkKCQnRuHHj1LlzZ+3atUtdunRp3p0DAAAtlkPPAA0bNkyGYVxyfVZWls1ybm7uFedct27ddVYFAABudK3uHiAAAIDrRQACAACmQwACAACmQwACAACmQwACAACmQwACAACmQwACAACmQwACAACmQwACAACmQwACAACmQwACAACmQwACAACmQwACAACmQwACAACmQwACAACmQwACAACmQwACAACmQwACAACmQwACAACmQwACAACmQwACAACmQwACAACmQwACAACmQwACAACmc00BqEePHjp58mS9/jNnzqhHjx7XXRQAAEBTuqYAdPjwYdXW1tbrr6mp0dGjR6+7KAAAgKbkcjWD33nnHevPmzdvlqenp3W5trZWOTk5CgoKsltxAAAATeGqAtCYMWMkSRaLRQkJCTbr2rRpo6CgIC1ZssRuxQEAADSFqwpAdXV1kqTg4GB98skn8vb2bpKiAAAAmtJVBaAfFBcX27sOAACAZnNNAUiScnJylJOTo+PHj1vPDP1g5cqV110YAABAU7mmADRv3jzNnz9fgwYNkp+fnywWi73rAgAAaDLXFIAyMzOVlZWlhx56yN71AAAANLlreg/QxYsXdccdd9i7FgAAgGZxTQFoypQpWrt2rb1rAQAAaBbXdAnswoULevnll/X+++8rNDRUbdq0sVm/dOlSuxQHAADQFK7pDNCnn36q8PBwOTk5ad++ffr73/9ubQUFBY2eZ/v27Ro1apT8/f1lsVi0cePGK26Tm5urgQMHys3NTbfccouysrLqjcnIyFBQUJDc3d0VFRWl3bt3N37nAADADe+azgB9+OGHdvnw6upqhYWFafLkybr//vuvOL64uFj33nuvHn30Ub322mvKycnRlClT5Ofnp9jYWEnS+vXrlZycrMzMTEVFRSk9PV2xsbEqLCxU165d7VI3AABo3a75PUD2EB8fr/j4+EaPz8zMVHBwsPXrNvr27auPPvpIL7zwgjUALV26VFOnTlViYqJ1m02bNmnlypV6+umn7b8TAACg1bmmADR8+PDLvvvngw8+uOaCLicvL08xMTE2fbGxsZo5c6ak759Oy8/PV0pKinW9k5OTYmJilJeXd8l5a2pqVFNTY12urKy0b+EAAKBFuaYAFB4ebrP87bffqqCgQPv27av3Jan2VFZWJh8fH5s+Hx8fVVZW6vz58zp9+rRqa2sbHHPgwIFLzpuWlqZ58+Y1Sc0AAKDluaYA9MILLzTYP3fuXFVVVV1XQY6QkpKi5ORk63JlZaUCAgIcWBEAAGhK1/QU2KU8+OCDTfo9YL6+viovL7fpKy8vl4eHh9q2bStvb285Ozs3OMbX1/eS87q5ucnDw8OmAQCAG5ddA1BeXp7c3d3tOaWN6Oho5eTk2PRt3bpV0dHRkiRXV1dFRkbajKmrq1NOTo51DAAAwDVdAvvPR9YNw1Bpaan27Nmj2bNnN3qeqqoqFRUVWZeLi4tVUFAgLy8vBQYGKiUlRUePHtWaNWskSY8++qh+//vf66mnntLkyZP1wQcf6I033tCmTZuscyQnJyshIUGDBg3S4MGDlZ6erurqautTYQAAANcUgDw9PW2WnZycFBISovnz52vkyJGNnmfPnj0aPny4dfmH+3ASEhKUlZWl0tJSlZSUWNcHBwdr06ZNevzxx7Vs2TJ169ZNr776qvUReEkaP368Tpw4oTlz5qisrEzh4eHKzs6ud2M0AAAwL4thGIaji2hpKisr5enpqbNnz9r9fqC9e/cqMjJSI36zSl6BIXab91RJobY+m6j8/HwNHDjQbvMCANBaXM3v7+t6EWJ+fr72798vSerfv78iIiKuZzoAAIBmcU0B6Pjx43rggQeUm5urjh07SpLOnDmj4cOHa926derSpYs9awQAALCra3oK7LHHHtO5c+f0+eef69SpUzp16pT27dunyspK/fKXv7R3jQAAAHZ1TWeAsrOz9f7776tv377Wvn79+ikjI+OqboIGAABwhGs6A1RXV6c2bdrU62/Tpo3q6uquuygAAICmdE0B6O6779aMGTN07Ngxa9/Ro0f1+OOP65577rFbcQAAAE3hmgLQ73//e1VWViooKEg9e/ZUz549FRwcrMrKSr300kv2rhEAAMCurukeoICAAO3du1fvv/++9VvW+/btq5iYGLsWBwAA0BSu6gzQBx98oH79+qmyslIWi0UjRozQY489pscee0y33Xab+vfvr//7v/9rqloBAADs4qoCUHp6uqZOndrg2xU9PT3185//XEuXLrVb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erqqq6uVmJgoSZo0aZJuvvlmpaWlSZJmzJihu+66S0uWLNG9996rdevWac+ePXr55ZclSRaLRTNnztRvf/tb9erVy/oYvL+/vzVkAQAAc3N4ABo/frxOnDihOXPmqKysTOHh4crOzrbeNFdSUiInp389rX/HHXdo7dq1euaZZ/TrX/9avXr10saNG63vAJKkp556StXV1frZz36mM2fO6M4771R2djbvAAIAAJJaQACSpKSkpEte8srNza3XN3bsWI0dO/aS81ksFs2fP1/z58+3V4l24+bmptTU1HqX3FAfx6rxOFaNx7FqPI5V43GsGq+lHCuLYTTmWTEAAIAbh8PfBA0AANDcCEAAAMB0CEAAAMB0CEDNKCMjQ0FBQXJ3d1dUVJR2797t6JJapO3bt2vUqFHy9/eXxWLhS2wvIy0tTbfddps6dOigrl27asyYMdaveoCt5cuXKzQ01PrukejoaL333nuOLqvFW7RokfX1Iqhv7ty5slgsNq1Pnz6OLqvFOnr0qB588EF17txZbdu21YABA7Rnzx6H1EIAaibr169XcnKyUlNTtXfvXoWFhSk2NlbHjx93dGktTnV1tcLCwpSRkeHoUlq8bdu2afr06dq1a5e2bt2qb7/9ViNHjlR1dbWjS2txunXrpkWLFik/P1979uzR3XffrdGjR+vzzz93dGkt1ieffKI//vGPCg0NdXQpLVr//v1VWlpqbR999JGjS2qRTp8+rSFDhqhNmzZ677339M9//lNLlixRp06dHFPQFb8sA3YxePBgY/r06dbl2tpaw9/f30hLS3NgVS2fJGPDhg2OLqPVOH78uCHJ2LZtm6NLaRU6depkvPrqq44uo0U6d+6c0atXL2Pr1q3GXXfdZcyYMcPRJbVIqampRlhYmKPLaBV+9atfGXfeeaejy7DiDFAzuHjxovLz8xUTE2Ptc3JyUkxMjPLy8hxYGW40Z8+elSR5eXk5uJKWrba2VuvWrVN1dbX1a3Rga/r06br33ntt/t5Cww4ePCh/f3/16NFDEydOVElJiaNLapHeeecdDRo0SGPHjlXXrl0VERGhV155xWH1EICaQUVFhWpra61vt/6Bj4+PysrKHFQVbjR1dXWaOXOmhgwZYvNmdPzLZ599pptuuklubm569NFHtWHDBvXr18/RZbU469at0969e61fQYRLi4qKUlZW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m88+cuSIIckoLCw0DMMw7rrrLiMiIuKK++vv7288++yzNn233Xab8Ytf/MK6HBYWZqSmpl52noSEBMPZ2dlo37694ebmZkgynJycjD//+c+GYRjGhQsXjHbt2hk7d+602e6RRx4xJkyYYBiGYaSkpBj9+vWzWf+rX/3KkGScPn3aMIzGHfeePXsaa9eutRmzYMECIzo62jAMw3jssceMu+++26irq2twXyQZGzZssOnr0KGDkZWVddljANzoXBwZvgA0n8WLF+vuu+9u9FmPhvTv319OTv86cezj46Nbb73Vuuzs7KzOnTvr+PHjNttFR0dbf3ZxcdGgQYO0f/9+Sd9fjvnwww9100031fu8Q4cOqXfv3pKkyMjIy9ZWWVmpY8eOaciQITb9Q4YM0T/+8Y9G7uG/DB8+XMuXL1d1dbVeeOEFubi46H/+538kSUVFRfrmm280YsQIm20uXryoiIgISdL+/fsVFRVls/7fj0NjVFdX69ChQ3rkkUc0depUa/93330nT09PSd9fmhwxYoRCQkIUFxen++67TyNHjrzsvMnJyZoyZYr+9Kc/KSYmRmPHjlXPnj2vqjagtSMAASbxX//1X4qNjVVKSooefvhhm3VOTk4yDMOm79tvv603x39eJvnhKan/7Kurq2t0XVVVVRo1apQWL15cb52fn5/15/bt2zd6Tnto3769brnlFknSypUrFRYWphUrVuiRRx5RVVWVJGnTpk26+eabbbZzc3Nr9Gdc6bj/8DmvvPJKvTDl7OwsSRo4cKCKi4v13nvv6f3339e4ceMUExNT736kfzd37lz99Kc/1aZNm/Tee+8pNTVV69at049//ONG1w60dgQgwEQWLVqk8PBwhYSE2PR36dJFZWVlMgzD+ni8Pd/ds2vXLv3Xf/2XpO/PXuTn5yspKUnS97/A33rrLQUFBcnF5dr/SvLw8JC/v7927Nihu+66y9q/Y8cODR48+Lrqd3Jy0q9//WslJyfrpz/9qfr16yc3NzeVlJTYfNa/69u3r9555x2bvl27dtksX+m4+/j4yN/fX19++aUmTpx4yfo8PDw0fvx4jR8/Xj/5yU8UFxenU6dOycvLS23atFFtbW29bXr37q3evXvr8ccf14QJE7Rq1SoCEEyFm6ABExkwYIAmTpyoF1980aZ/2LBhOnHihJ577jkdOnRIGRkZeu+99+z2uRkZGdqwYYMOHDig6dOn6/Tp05o8ebIkafr06Tp16pQmTJigTz75RIcOHdLmzZuVmJjY4C/uy5k1a5YWL16s9evXq7CwUE8//bQKCgo0Y8aM696HsWPHytnZWRkZGerQoYOefPJJPf7441q9erUOHTqkvXv36qWXXrLenPzoo4/q4MGDmjVrlgoLC7V27VplZWXZzNmY4z5v3jylpaXpxRdf1BdffKHPPvtMq1at0tKlSyVJS5cu1euvv64DBw7oiy++0JtvvilfX1917NhR0vdPguXk5KisrEynT5/W+fPnlZSUpNzcXH311VfasWOHPvnkE/Xt2/e6jxHQmhCAAJOZP39+vUtUffv21R/+8AdlZGQoLCxMu3fvvq57hf7TokWLtGjRIoWFhemjjz7SO++8I29vb0mynrWpra3VyJEjNWDAAM2cOVMdO3a0ud+oMX75y18qOTlZTzzxhAYMGKDs7Gy988476tWr13Xvg4uLi5KSkvTcc8+purpaCxYs0OzZs5WWlqa+ffsqLi5OmzZtUnBwsCQpMDBQb731ljZu3KiwsDBlZmZq4cKFNnM25rhPmTJFr776qlatWqUBAwborrvuUlZWlvVzOnTooOeee06DBg3SbbfdpsOHD+vdd9+1HrslS5Zo69atCggIUEREhJydnXXy5ElNmjRJvXv31rhx4xQfH6958+Zd9zECWhOL8Z8XoAEATSI3N1fDhw/X6dOnrWdoADgGZ4AAAIDpEIAAAIDpcAkMAACYDmeAAACA6RCAAACA6RCAAACA6RCAAACA6RCAAACA6RCAAACA6RCAAACA6RCAAACA6RCAAACA6fw/SU6DlpIhVtUAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df_lam1 = MM1(lamb=lambda1, mu=mu)\n", - "sns.histplot(df_lam1, x=\"Number of Requests\", bins=20)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.3212716" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df_lam1[\"Number of Requests\"].mean()" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0.3333333333333333" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "rho = lambda1/mu\n", - "expected_mean = rho/(1-rho)\n", - "expected_mean" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "# Good enough. Unlike the princeton demo, the code I wrote has discrete steps, which introduces a bit of variability to the " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## $\\lambda=2$" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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F8XExLi0OAAAgJqq0ZWbjz/+WF27dlVxcbFsNptuu+02TZ48WZMnT1bfvn117bXX6v/+7//cVSsAAMBF1SjcJCcna+LEiQoICKi0rmnTpvrjH/+opKQklxUHAABQUzUKN99++60GDx583vWDBg1SZmbmJRcFAABQWzUKN4WFhVX+BPycevXq6dChQ5dcFAAAQG3VKNy0bt1aO3bsOO/67du3KyQk5JKLAgAAqK0ahZvbb79ds2bN0unTpyutO3XqlBISEnTnnXe6rDgAAICaqtFPwZ9++mm999576tixo+Li4tSpUydJUnZ2tlJSUlReXq4///nPbikUAACgOmoUboKCgrR582Y98sgjmjlzpizLkiTZbDbFxsYqJSVFQUFBbikUAACgOmr8EL927dppw4YNOnr0qHbt2iXLsnTNNdeoefPm7qgPAACgRmr1hGJJat68ufr27evKWgAAAC5Zrd4tBQAAUFcRbgAAgFEINwAAwCiEGwAAYBTCDQAAMArhBgAAGIVwAwAAjEK4AQAARiHcAAAAoxBuAACAUQg3AADAKIQbAABgFMINAAAwCuEGAAAYhXADAACMQrgBAABGIdwAAACjEG4AAIBRCDcAAMAohBsAAGAUwg0AADAK4QYAABiFcAMAAIxCuAEAAEYh3AAAAKMQbgAAgFEINwAAwCiEGwAAYBTCDQAAMArhBgAAGKVOhJuUlBSFh4fL399fUVFR2rJlS7X2W7lypWw2m4YNG+beAgEAgNfweLhZtWqV4uPjlZCQoK1btyoyMlKxsbE6ePDgBffbu3evHn/8cd14442XqVIAAOANPB5ukpKSNHHiRI0bN05du3ZVamqqGjZsqKVLl553n/Lyco0aNUpz585V+/btL2O1AACgrvNouCkrK1NmZqZiYmIcbT4+PoqJiVFGRsZ595s3b55atWql8ePHX/QYpaWlKi4udloAAIC5PBpuioqKVF5erqCgIKf2oKAgFRQUVLnP559/rtdff12vvvpqtY6RmJiopk2bOpawsLBLrhsAANRdHr8tVRM//vijHnjgAb366qsKDAys1j4zZ87U8ePHHcu+ffvcXCUAAPCkep48eGBgoHx9fVVYWOjUXlhYqODg4Erb5+bmau/evRo6dKijraKiQpJUr1495eTkqEOHDk772O122e12N1QPAADqIo9eualfv7569+6t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OTmeLdpLXGhsT548aQ0aNMi66qqrLD8/P6tdu3bWxIkTrYKCAk+XXedVNaaSrGXLljm2OXXqlPXoo49azZs3txo2bGjdddddVn5+vueK9hIXG9u8vDzrpptuslq0aGHZ7Xbr6quvtqZPn24dP37cs4XXAG8FBwAARmHODQAAMArhBgAAGIVwAwAAjEK4AQAARiHcAAAAoxBuAACAUQg3AADAKIQbAABgFMINgFrbu3evbDab470zdUF2drauu+46+fv7q2fPnp4uB4AHEG4AL/bggw/KZrNp4cKFTu1r166VzWbzUFWelZCQoEaNGiknJ8fppYq/dG7cbDab/Pz8FBERoSeeeEKnT5++zNVeOpvNprVr13q6DKBOIdwAXs7f31+LFi3S0aNHPV2Ky5SVldV639zcXN1www1q166dWrZsed7tBg8erPz8fO3evVvPP/+8/ud//kcJCQm1Pi6AuoNwA3i5mJgYBQcHKzEx8bzbzJkzp9ItmuTkZIWHhzs+P/jggxo2bJgWLFigoKAgNWvWTPPmzdPZs2c1ffp0tWjRQm3atNGyZcsq9Z+dna3rr79e/v7+6tatmz799FOn9Tt27NCQIUPUuHFjBQUF6YEHHlBRUZFj/YABAxQXF6epU6cqMDDwvG/Mrqio0Lx589SmTRvZ7Xb17NlTGzdudKy32WzKzMzUvHnzZLPZNGfOnPOOid1uV3BwsMLCwjRs2DDFxMRo06ZNTsdKTExURESEGjRooMjISL377rtOfWzYsEEdO3ZUgwYNNHDgQC1fvlw2m03Hjh2r9rhL0muvvaYuXbrI399fnTt31ssvv+xYV1ZWpri4OIWEhMjf31/t2rVz/LM+189dd90lm83m+Pztt99q4MCBatKkiQICAtS7d29988035x0LwDSEG8DL+fr6asGCBXrxxRf13//+95L6+vjjj3XgwAF99tlnSkpKUkJCgu688041b95cX331lR5++GH98Y9/rHSc6dOn67HHHtO///1vRUdHa+jQoTp8+LAk6dixY7rlllvUq1cvffPNN9q4caMKCwt1//33O/XxxhtvqH79+vriiy+UmppaZX1//etftWTJEj333HPavn27YmNj9dvf/lY7d+6UJOXn5+vaa6/VY489pvz8fD3++OPV+t47duzQ5s2bVb9+fUdbYmKi3nzzTaWmpuo///mPpk2b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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df_lam2 = MM1(lamb=lambda2, mu=mu)\n", - "sns.histplot(df_lam2, x=\"Number of Requests\", bins=20)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "3.0497912" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df_lam2[\"Number of Requests\"].mean()" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "3.0" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "rho = lambda2/mu\n", - "expected_mean = rho/(1-rho)\n", - "expected_mean" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## $\\lambda=3$" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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pk2VkJDAheoAAOCuVKF3qsrLy+Xi4nLFehcXF5WXl992UwAAAI6mQqHqscce08svv6zDhw9b1/3yyy8aM2aMunTpYlpzAAAAjqJCp/8WLFigp59+Wg0aNFBwcLAk6dChQ2revLn+/ve/m9ogqr9LnyA1k6+vr0JCQkyfFwCAa6lQqAoODtb27du1evVqZWdnS5LCw8MVFRVlanOo3kqKjkuyaMCAAabP7eFRU9nZWQQrAMAdc0uhas2aNYqLi9PmzZvl6empxx9/XI8//rgkqaioSM2aNVNiYqIeeeSRSmkW1UvZ2VOSDLXuN071wpqYNm9x3gGlL5yigoICQhUA4I65pVA1d+5cDR8+XJ6enleMeXl56aWXXtLs2bMJVbgltf1C5BPS2N5tAABwW27pQvV///vfiomJueZ4165dlZGRcdtNAQAAOJpbClVHjhy56q0ULqlRo4aOHTt2200BAAA4mlsKVb/73e+0a9eua47v3LlTgYGBt90UAACAo7mlUPXEE0/ozTff1Llz564YKykp0aRJk/Tkk0+a1hwAAICjuKUL1SdMmKAvv/xSjRo1UlxcnBo3/vXi4uzsbCUkJOjixYv6r//6r0ppFAAAoCq7pVDl7++vTZs2aeTIkRo/frwMw5AkWSwWRUdHKyEhQf7+/pXSKAAAQFV2yzf/DA0N1TfffKOTJ09q7969MgxD999/v+65557K6A8AAMAhVOiO6pJ0zz33qH379mb2AgAA4LAq9IXKAAAAsEWoAgAAMAGhCgAAwASEKgAAABMQqgAAAExAqAIAADABoQoAAMAEhCoAAAATEKoAAABMQKgCAAAwAaEKAADABIQqAAAAExCqAAAATECoAgAAMAGhCgAAwASEKgAAABMQqgAAAExAqAIAADABoQoAAMAEdg1VGzZs0FNPPaWgoCBZLBatWLHCZtwwDE2cOFGBgYHy8PBQVFSU9uzZY1Nz4sQJ9e/fX56envL29tbQoUN1+vRpm5qdO3fqkUcekbu7u4KDgzVr1qwrelm+fLmaNGkid3d3tWjRQt98880t9wIAAO5edg1VZ86cUatWrZSQkHDV8VmzZmn+/PlKTExUenq6atWqpejoaJ07d85a079/f+3evVspKSlatWqVNmzYoBdffNE6XlxcrK5duyo0NFQZGRl65513NHnyZH344YfWmk2bNqlv374a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unXV6dheOmbX+90NCAi44gMnFy5c0IkTJxz2mF8KVAcPHlRKSorNu1RXExERoQsXLujAgQN3psFKdO+998rX19f677c6Hl9J+te//qWcnJwb/j5L1ev4XkKocmCurq5q27atUlNTrevKy8uVmpqqyMhIO3ZmDsMwFBcXp6+++kpr1qxRWFjYDZ+TmZkpSQoMDKzk7irf6dOntW/fPgUGBqpt27ZycXGxOdY5OTnKzc11+GO9aNEi+fn5qXv37tetq07HNiwsTAEBATbHs7i4WOnp6dbjGRkZqcLCQmVkZFhr1qxZo/LycmvAdCSXAtWePXu0evVq1a1b94bPyczMlJOT0xWnyRzRzz//rOPHj1v//Va343vJxx9/rLZt26pVq1Y3rK1Ox9fK3lfK4/Z8/vnnhpubm7F48WLjp59+Ml588UXD29vbyM/Pt3drt23kyJGGl5eXsW7dOiMvL8/6OHv2rGEYhrF3715j6tSpxrZt24z9+/cbX3/9tXHvvfcaHTt2tHPnFfPKK68Y69atM/bv329s3LjRiIqKMnx9fY2jR48ahmEYI0aMMEJCQow1a9YY27ZtMyIjI43IyEg7d317Ll68aISEhBjjxo2zWV8dju2pU6eMHTt2GDt27DAkGbNnzzZ27Nhh/bTbzJkzDW9vb+Prr782du7cafTo0cMICwszSkpKrHPExMQYbdq0MdLT040ffvjBuP/++42+ffvaa5Ou63rbW1paajz99NNG/fr1jczMTJvf5/PnzxuGYRibNm0y5syZY2RmZhr79u0z/v73vxv16tUzBg4caOctu7rrbe+pU6eMV1991UhLSzP2799vrF692njggQeM+++/3zh37px1jupyfC8pKioyatasaXzwwQdXPN/Rjm9FEaqqgffee88ICQkxXF1djQ4dOhibN2+2d0umkHTVx6JFiwzDMIzc3FyjY8eOho+Pj+Hm5mbcd999xtixY42ioiL7Nl5Bffr0MQIDAw1XV1fjd7/7ndGnTx9j79691vGSkhLjT3/6k3HPPfcYNWvWNP7whz8YeXl5duz49n333XeGJCMnJ8dmfXU4tmvXrr3qv99BgwYZhvHrbRXefPNNw9/f33BzczO6dOlyxX44fvy40bdvX6N27dqGp6en8cILLxinTp2yw9bc2PW2d//+/df8fV67dq1hGIaRkZFhREREGF5e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KOnXd1kyMjIUFxcn6ddQ8M9//lMNGjRQjRoV/0+dp6engoKCtHHjRj366KPW9Rs3blSHDh1uq38nJye98cYbio+PV79+/dS0aVO5ubkpNzfX5rUuFx4erpUrV9qs27x5s83yjfa7v7+/goKC9J///Ef9+/e/Zn+enp7q06eP+vTpoz/+8Y+KiYnRiRMn5OPjIxcXF128ePGK5zRq1EiNGjXSmDFj1LdvXy1atIhQhbsGF6oDuG0tWrRQ//79NX/+fJv1nTp10rFjxzRr1izt27dPCQkJ+vbbb0173YSEBH311VfKzs5WbGysTp48qSFDhkiSYmNjdeLECfXt21dbt27Vvn379N133+mFF164ahi4nrFjx+rtt9/WsmXLlJOTo9dff12ZmZl6+eWXb3sbnnnmGTk7OyshIUF16tTRq6++qjFjxuiTTz7Rvn37tH37dr333nvWC8hHjBihPXv2aOzYscrJydHSpUu1ePFimzlvZr9PmTJFM2bM0Pz58/W///u/+vHHH7Vo0SLNnj1bkjR79mx99tlnys7O1v/+7/9q+fLlCggIkLe3t6RfPwGYmpqq/Px8nTx5UiUlJYqLi9O6det08OBBbdy4UVu3blV4ePht7yPAURCqAJhi6tSpV5yeCw8P1/vvv6+EhAS1atVKW7Zsua1rr35r5syZmjlzplq1aqUffvhBK1eulK+vryRZ3126ePGiunbtqhYtWmj06NHy9va2uX7rZvz5z39WfHy8XnnlFbVo0ULJyclauXKl7r///tvehho1aiguLk6zZs3SmTNnNG3aNL355puaMWOGwsPDFRMTo6SkJIWFhUmSQkJC9M9//lMrVqxQq1atlJiYqOnTp9vMeTP7fdiwYfroo4+0aNEitWjRQo8++qgWL15sfZ06depo1qxZateundq3b68DBw7om2++se67d999VykpKQoODlabNm3k7Oys48ePa+DAgWrUqJGeffZZdevWTVOmTLntfQQ4Covx2xPvAACHsm7dOnXu3FknT560vpME4M7jnSoAAAATEKoAAABMwOk/AAAAE/BOFQAAgAkIVQAAACYgVAEAAJiAUAUAAGACQhUAAIAJCFUAAAAmIFQBAACYgFAFAABggv8Pug2dTgi0+RgAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "df_lam3 = MM1(lamb=lambda3, mu=mu)\n", - "sns.histplot(df_lam3, x=\"Number of Requests\", bins=20)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "77.3641952" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df_lam3[\"Number of Requests\"].mean()" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "tags": [] - }, - "outputs": [ - { - "ename": "ZeroDivisionError", - "evalue": "float division by zero", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mZeroDivisionError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[15], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m rho \u001b[38;5;241m=\u001b[39m lambda3\u001b[38;5;241m/\u001b[39mmu\n\u001b[0;32m----> 2\u001b[0m expected_mean \u001b[38;5;241m=\u001b[39m \u001b[43mrho\u001b[49m\u001b[38;5;241;43m/\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[43mrho\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3\u001b[0m expected_mean\n", - "\u001b[0;31mZeroDivisionError\u001b[0m: float division by zero" - ] - } - ], - "source": [ - "rho = lambda3/mu\n", - "expected_mean = rho/(1-rho)\n", - "expected_mean" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# See if we just got lucky" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " Actual: 0.142347\n", - "Theoretical: 0.13636363636363635\n" - ] - } - ], - "source": [ - "print(f\" Actual: {MM1(lamb=3, mu=25, SIM_LENGTH=int(2e6), SCALING_FACTOR=1e-4)['Number of Requests'].mean()}\")\n", - "rho = 3/25\n", - "expected_mean = rho/(1-rho)\n", - "print(f\"Theoretical: {expected_mean}\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "colab": { - "provenance": [] - }, - "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.10.4" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -}