{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# Simulation for Optimization examples\n" ] }, { "cell_type": "code", "execution_count": 283, "metadata": {}, "outputs": [], "source": [ "\n", "import itertools\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "import scipy.stats as stats\n", "\n", "# you may not use them directly, stats.binom is suggested.\n", "from scipy.stats import poisson, rv_discrete, binom, rv_discrete, norm, halfnorm\n", "\n", "import warnings\n", "warnings.filterwarnings('ignore')\n", "\n", "np.random.seed(42)\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "## Problem 1\n", "\n", "### You operate an aircraft that flies two flights per day: an \"outbound\" flight from its base to a remote destination, and then and \"inbound\" flight back again. The aircraft can carry a mix of passengers and freight:\n", "\n", "### If configured for all passengers, the aircraft holds 216 seats. Each freight pallet you configure the aircraft to hold takes away 24 seats, and you are considering setting up the aircraft to hold 0, 1, 2, 3, 4, 5, or 6 freight pallets. The split between seats and space for pallets must be decided once a year when the aircraft undergoes \"heavy maintenance\"; it cannot be changed for each flight.\n", "\n", "### You make a profit of $50 for each passenger carried (in either direction), and demand for seats on the outbound flight is Poisson with a mean of 160, while demand for seats on the inbound flight is Poisson with a mean of 159 (independent of the outbound flight). Demand for freight carriage is independent of passenger demand and also independent between the inbound and outbound flights.(See Pallet_Table).You make a profit $275 per pallet carried (in either direction). What aircraft configuration maximizes the average profit per day?\n", "\n", "\n", "\n", "\n", "|num | outbound_pallets_prob| inbound_pallets_prob |\n", "|:--:|:--:|:--:|\n", "| 0 | 0.06 | 0.07 |\n", "| 1 | 0.08 | 0.09 |\n", "| 2 | 0.18 | 0.18 |\n", "| 3 | 0.20 | 0.19 |\n", "| 4 | 0.21 | 0.17 |\n", "| 5 | 0.16 | 0.16 |\n", "| 6 | 0.11 | 0.14 |\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Set the parameters of the problem and generate the random variables\n" ] }, { "cell_type": "code", "execution_count": 245, "metadata": {}, "outputs": [], "source": [ "N = 10000 # set the number of trials\n", "n = (0, 1, 2, 3, 4, 5, 6) # number of pallets considered\n", "\n", "# seats_capacity = 216\n", "# taken_by_each_pallet = 24\n", "# passenger_profit = 50 / seat\n", "# pallet_profit = 275 / pallet\n" ] }, { "cell_type": "code", "execution_count": 246, "metadata": {}, "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", "
outbound_pallets_probinbound_pallets_prob
00.060.07
10.080.09
20.180.18
30.200.19
40.210.17
50.160.16
60.110.14
\n", "
" ], "text/plain": [ " outbound_pallets_prob inbound_pallets_prob\n", "0 0.06 0.07\n", "1 0.08 0.09\n", "2 0.18 0.18\n", "3 0.20 0.19\n", "4 0.21 0.17\n", "5 0.16 0.16\n", "6 0.11 0.14" ] }, "execution_count": 246, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Create the pallets_Table for inboud and outbound demand discrete probability\n", "pallets_table = pd.DataFrame(\n", " {\n", " 'outbound_pallets_prob': [0.06, 0.08, 0.18, 0.2, 0.21, 0.16, 0.11],\n", " 'inbound_pallets_prob': [0.07, 0.09, 0.18, 0.19, 0.17, 0.16, 0.14]\n", " },\n", " index=n)\n", "pallets_table\n" ] }, { "cell_type": "code", "execution_count": 247, "metadata": {}, "outputs": [], "source": [ "# genenerate the inbound and outbound demand random variables\n", "\n", "demand_pal_out_rvs = stats.rv_discrete(\n", " name='Pal_Out_rvs',\n", " values=(n, pallets_table['outbound_pallets_prob'])).rvs(size=N)\n", "\n", "demand_pal_in_rvs = stats.rv_discrete(\n", " name='Pal_In_rvs',\n", " values=(n, pallets_table['inbound_pallets_prob'])).rvs(size=N)\n" ] }, { "cell_type": "code", "execution_count": 248, "metadata": {}, "outputs": [], "source": [ "# Generate seats demand random variables\n", "\n", "mu_out = 160 # demand for seats on the outbound flight is Poisson with a mean of 160\n", "\n", "mu_in = 159 # demand for seats on the inbound flight is Poisson with a mean of 159\n", "\n", "demand_seats_out_rvs = stats.poisson(mu_out).rvs(size=N)\n", "demand_seats_in_rvs = stats.poisson(mu_in).rvs(size=N)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Considering setting up the aircraft to hold 0, 1, 2, 3, 4, 5, or 6 freight pallets\n" ] }, { "cell_type": "code", "execution_count": 249, "metadata": {}, "outputs": [], "source": [ "# When there is 0 freight pallet in the plane.\n", "# Pallets sale = min(demand_pallets and 0),thus:\n", "\n", "pallets_out_sale = 0\n", "pallets_in_sale = 0\n" ] }, { "cell_type": "code", "execution_count": 250, "metadata": {}, "outputs": [], "source": [ "# number_of_seats_In_and_Out_available = seats_capacity = 216\n", "seats_out_sale = np.minimum(demand_seats_out_rvs, np.ones(N) * 216)\n", "seats_in_sale = np.minimum(demand_seats_in_rvs, np.ones(N) * 216)\n" ] }, { "cell_type": "code", "execution_count": 251, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "When there is 0 freight pallet in the plane.\n", "the mean of the profit is 15950.37\n" ] } ], "source": [ "profit_Out = seats_out_sale * 50\n", "profit_In = seats_in_sale * 50\n", "\n", "profit_total = profit_Out + profit_In\n", "mean_profit_0 = np.mean(profit_total)\n", "\n", "print(\n", " f\"When there is 0 freight pallet in the plane.\\nthe mean of the profit is {mean_profit_0}\"\n", ")\n" ] }, { "cell_type": "code", "execution_count": 252, "metadata": {}, "outputs": [], "source": [ "# Create simulation function for the mean profit of each scenario from 1 to 6 pallets\n", "\n", "\n", "def mean_profit(i, seats_capacity=216):\n", " \"\"\"Simulate the actuall sales of pallets and seats numbers for each scenario,where i = numbers of palltes\"\"\"\n", "\n", " pallets_out_sale = np.minimum(demand_pal_out_rvs, np.ones(N) * i)\n", " pallets_in_sale = np.minimum(demand_pal_in_rvs, np.ones(N) * i)\n", "\n", " # Next, calculate the available seats left for passengers:\n", " seats_out_available = seats_capacity - pallets_out_sale * 24\n", " seats_out_sale = np.minimum(demand_seats_out_rvs, seats_out_available)\n", "\n", " seats_in_available = seats_capacity - pallets_in_sale * 24\n", " seats_in_sale = np.minimum(demand_seats_in_rvs, seats_in_available)\n", " \"\"\"calculate the profit\"\"\"\n", " profit_out = seats_out_sale * 50 + pallets_out_sale * 275\n", " profit_in = seats_in_sale * 50 + pallets_in_sale * 275\n", "\n", " profit_total = profit_out + profit_in\n", " return np.mean(profit_total).astype(int)\n" ] }, { "cell_type": "code", "execution_count": 253, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "When there are 0 pallets in the plane:\n", " The mean of the profit is $15950.\n", "When there are 1 pallets in the plane:\n", " The mean of the profit is $16462.\n", "When there are 2 pallets in the plane:\n", " The mean of the profit is $16770.\n", "When there are 3 pallets in the plane:\n", " The mean of the profit is $16183.\n", "When there are 4 pallets in the plane:\n", " The mean of the profit is $15339.\n", "When there are 5 pallets in the plane:\n", " The mean of the profit is $14815.\n", "When there are 6 pallets in the plane:\n", " The mean of the profit is $14582.\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA2QAAAHUCAYAAABVveuUAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABMHElEQVR4nO3de1hVZd7/8c+WswhbERF5RHQqEUURpRQtTxWIgoeax2OoHSifMiuhKZ3MQwcstazMtEazzKT6mY5lkY5nx7OGk3kYMw0cQU0RBA0R1u+PHtfjDlBQcQm+X9e1r4u91nev/V37ZkY+3Wvd22YYhiEAAAAAwHVXw+oGAAAAAOBmRSADAAAAAIsQyAAAAADAIgQyAAAAALAIgQwAAAAALEIgAwAAAACLEMgAAAAAwCIEMgAAAACwCIEMAAAAACxCIAMAi82dO1c2m002m02rV68usd8wDN16662y2Wzq0qXLde+vIrp06WKei81mk4eHh8LCwjRt2jQVFxdf0/dasWKFIiIi5OnpKZvNpsWLF5uf5aFDh8y6Tz/9VNOmTbum733BCy+8oEaNGsnZ2Vm1a9eulPe4GjabTSNGjLC6jRtSab8rAGAFZ6sbAAD8zsvLS7Nnzy4RutasWaMDBw7Iy8vLmsYq6E9/+pPmz58vSTp27JhmzpypZ555RpmZmXrttdeuyXsYhqF+/fqpadOmWrJkiTw9PRUcHKzz589r48aNatCggVn76aefateuXXr66aevyXtf8Pe//12vvPKK/vrXvyomJkZubm7X9PioXD179izxuwIAViCQAcANon///po/f77effddeXt7m9tnz56tyMhI5ebmWthd+Xl4eKh9+/bm85iYGDVr1kzTp0/Xyy+/LBcXlxKvMQxDv/32mzw8PMr1HkeOHNHJkyfVt29f3X333Q776tWrd3UnUE67du2SJI0cOVJ+fn7X5T1x9c6ePSt3d3fVq1fvuv2uAMClcMkiANwgBg4cKElasGCBuS0nJ0cLFy7UQw89VOprzp07p5dfflnNmjWTm5ub6tWrpwcffFDHjx93qPvss88UFRWlBg0ayMPDQyEhIXr++eeVn5/vUDds2DDVqlVLP/30k3r06KFatWopMDBQiYmJKigouKLzcnFxUdu2bXXmzBmzrwuX0s2cOVMhISFyc3PTRx99JElav3697r77bnl5ealmzZrq0KGDli5dah5v/PjxatiwoSTpueeek81mU+PGjSWVvAytS5cuWrp0qX755ReHSykvpbi4WK+//rr5mfr5+WnIkCE6fPiwWdO4cWO98MILkqT69evLZrNp/Pjxlzzutm3b1KtXL/n4+Mjd3V3h4eH6/PPPHWqOHz+uxx9/XM2bN1etWrXk5+enbt26ad26dSWOV1BQoIkTJyokJETu7u6qW7euunbtqg0bNpSonTdvnkJCQlSzZk2FhYXp66+/vmSvFz6Hl19+WcHBwfLw8FDt2rXVqlUrvfXWWw51e/fu1cCBA1W/fn25ubmpUaNGGjJkiMPvS1ZWlh577DE1bNhQrq6uatKkiSZMmKDz58+bNYcOHZLNZtOUKVP0xhtvqEmTJqpVq5YiIyO1adOmEp/lgAED1LhxY3l4eKhx48YaOHCgfvnlF4e6C78Py5Yt00MPPaR69eqpZs2aKigoKPOSxTlz5igsLEzu7u7y8fFR3759tWfPnst+XgBwpZghA4AbhLe3t/785z9rzpw5euyxxyT9Hs5q1Kih/v37l7gPqri4WL1799a6dev0l7/8RR06dNAvv/yicePGqUuXLtq2bZs547R//3716NFDTz/9tDw9PbV371699tpr2rJli1auXOlw3MLCQvXq1UsPP/ywEhMTtXbtWr300kuy2+168cUXr+jcDhw4IGdnZ9WpU8fctnjxYq1bt04vvvii/P395efnpzVr1ujee+9Vq1atNHv2bLm5uWnGjBmKi4vTggUL1L9/fz3yyCMKCwvTfffdpyeffFKDBg0q83LBGTNm6NFHH9WBAwe0aNGicvX6P//zP3r//fc1YsQIxcbG6tChQxo7dqxWr16tHTt2yNfXV4sWLdK7776r2bNnKzU1VXa73QyJpVm1apW6d++udu3aaebMmbLb7UpJSVH//v115swZDRs2TJJ08uRJSdK4cePk7++vvLw8LVq0SF26dNGKFSvMy1nPnz+vmJgYrVu3Tk8//bS6deum8+fPa9OmTUpPT1eHDh3M9166dKm2bt2qiRMnqlatWnr99dfVt29f7du3T3/605/K7Pn111/X+PHj9cILL6hTp04qLCzU3r17derUKbNm586duvPOO+Xr66uJEyfqtttuU2ZmppYsWaJz587Jzc1NWVlZuuOOO1SjRg29+OKLuuWWW7Rx40a9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z72igcxms8kwjBKf09/+9jcVFRVd0flJUmRkpDw8PEqM/eHDh7Vy5corGnsAKA9myADgBjRp0qTL1gwYMEDz589Xjx499NRTT+mOO+6Qi4uLDh8+rFWrVql3797q27evOnTooDp16mj48OEaN26cXFxcNH/+fO3cufM6nEnFJCcn695771XXrl2VlJQkV1dXzZgxQ7t27dKCBQvKNdPxRy1bttSXX36p9957T23btlWNGjXKnMELDg7Wo48+qnfeeUc1atRQTEyMucpiYGCgnnnmmSs6r1mzZikmJkbR0dEaNmyY/uu//ksnT57Unj17tGPHDn3xxReSfg8vL730ksaNG6fOnTtr3759mjhxopo0aeKwRPzAgQP14Ycfavjw4dq3b5+6du2q4uJibd68WSEhIRowYMAV9XmxuLg4hYaGKiIiQvXq1dMvv/yiadOmKSgoyFxt8I033tCdd96pdu3a6fnnn9ett96qo0ePasmSJZo1a5a8vLw0ceJELV++XB06dNDIkSMVHBys3377TYcOHdI333yjmTNnXvayx4t5e3urU6dOmjx5snx9fdW4cWOtWbNGs2fPVu3ata/4fGvXrq2xY8dqzJgxGjJkiAYOHKgTJ05owoQJcnd317hx46742ABwKQQyAKiinJyctGTJEr311luaN2+ekpOT5ezsrIYNG6pz585q2bKlpN8vxVq6dKkSExP1wAMPyNPTU71799Znn32mNm3aWHwWjjp37qyVK1dq3LhxGjZsmIqLixUWFqYlS5YoNjb2io751FNP6ccff9SYMWOUk5MjwzBkGEaZ9e+9955uueUWzZ49W++++67sdru6d++u5OTkUu/HKo+uXbtqy5YteuWVV/T0008rOztbdevWVfPmzdWvXz+z7q9//avOnDmj2bNn6/XXX1fz5s01c+ZMLVq0yGGRFmdnZ33zzTdKTk7WggULNG3aNHl5eSksLEzdu3e/oh5L63nhwoX629/+ptzcXPn7++vee+/V2LFjzfvBwsLCtGXLFo0bN06jR4/W6dOn5e/vr27dupn3NjZo0EDbtm3TSy+9pMmTJ+vw4cPy8vJSkyZN1L17d4eFXcrr008/1VNPPaW//OUvOn/+vDp27Kjly5erZ8+eV3XOo0ePlp+fn95++2199tln8vDwUJcuXfTqq6+y5D2ASmMzLvWvEgAAAACg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dpSLi4u+/fZb7d69W1OnTlXt2rWtbu2Gw7L3uGLt2rVTmzZt9N5775nbQkJC1KdPHyUnJ1vYGS7HZrNp0aJF6tOnj9WtoJyOHz8uPz8/rVmzRp06dbK6HZSTj4+PJk+erIcfftjqVlCGvLw8tWnTRjNmzNDLL7+s1q1ba9q0aVa3hVKMHz9eixcvVlpamtWtoByef/55/fOf/+TqqXJghgxX5Ny5c9q+fbuioqIctkdFRWnDhg0WdQVUXzk5OZJ+/wMfN76ioiKlpKQoPz9fkZGRVreDS3jiiSfUs2dP3XPPPVa3gnLYv3+/AgIC1KRJEw0YMEA///yz1S2hDEuWLFFERIT++7//W35+fgoPD9cHH3xgdVs3JAIZrsivv/6qoqIi1a9f32F7/fr1lZWVZVFXQPVkGIZGjRqlO++8U6GhoVa3g0v44YcfVKtWLbm5uWn48OFatGiRmjdvbnVbKENKSop27NjBVR1VRLt27fTxxx/ru+++0wcffKCsrCx16NBBJ06csLo1lOLnn3/We++9p9tuu03fffedhg8frpEjR+rjjz+2urUbjrPVDaBqs9lsDs8NwyixDcDVGTFihP71r39p/fr1VreCywgODlZaWppOnTqlhQsXaujQoVqzZg2h7AaUkZGhp556SsuWLZO7u7vV7aAcYmJizJ9btmypyMhI3XLLLfroo480atQoCztDaYqLixUREaFXX31VkhQeHq4ff/xR7733noYMGWJxdzcWZshwRXx9feXk5FRiNuzYsWMlZs0AXLknn3xSS5Ys0apVq9SwYUOr28FluLq66tZbb1VERISSk5MVFhamt956y+q2UIrt27fr2LFjatu2rZydneXs7Kw1a9bo7bfflrOzs4qKiqxuEZfh6empli1bav/+/Va3glI0aNCgxH+MCgkJYfG3UhDIcEVcXV3Vtm1bLV++3GH78uXL1aFDB4u6AqoPwzA0YsQIffnll1q5cqWaNGlidUu4AoZhqKCgwOo2UIq7775bP/zwg9LS0sxHRESEBg8erLS0NDk5OVndIi6joKBAe/bsUYMGDaxuBaXo2LFjia9r+fe//62goCCLOrpxcckirtioUaMUHx+viIgIRUZG6v3331d6erqGDx9udWsoRV5enn766Sfz+cGDB5WWliYfHx81atTIws5QmieeeEKffvqp/v73v8vLy8ucjbbb7fLw8LC4O5RmzJgxiomJUWBgoE6fPq2UlBStXr1aqampVreGUnh5eZW4J9PT01N169blXs0bVFJSkuLi4tSoUSMdO3ZML7/8snJzczV06FCrW0MpnnnmGXXo0EGvvvqq+vXrpy1btuj999/X+++/b3VrNxwCGa5Y//79deLECU2cOFGZmZkKDQ3VN998w3/5uEFt27ZNXbt2NZ9fuN5+6NChmjt3rkVdoSwXvk6iS5cuDts//PBDDRs27Po3hMs6evSo4uPjlZmZKbvdrlatWik1NVX33nuv1a0B1cLhw4c1cOBA/frrr6pXr57at2+vTZs28XfHDer222/XokWLNHr0aE2cOFFNmjTRtGnTNHjwYKtbu+HwPWQAAAAAYBHuIQMAAAAAixDIAAAAAMAiBDIAAAAAsAiBDAAAAAAsQiADAAAAAIsQyAAAAADAIgQyAAAAALAIgQwAAAAALEIgAwBUa4cOHZLNZlNaWprVrZj27t2r9u3by93dXa1bt66091m9erVsNptOnTolSZo7d65q165dae8HAKg4AhkAoFINGzZMNptNkyZNcti+ePFi2Ww2i7qy1rhx4+Tp6al9+/ZpxYoVVrdzSTabTYsXL7a6DQCotghkAIBK5+7urtdee03Z2dlWt3LNnDt37opfe+DAAd15550KCgpS3bp1r2FXAICqhkAGAKh099xzj/z9/ZWcnFxmzfjx40tcvjdt2jQ1btzYfD5s2DD16dNHr776qurXr6/atWtrwoQJOn/+vJ599ln5+PioYcOGmjNnTonj7927Vx06dJC7u7tatGih1atXO+zfvXu3evTooVq1aql+/fqKj4/Xr7/+au7v0qWLRowYoVGjRsnX11f33ntvqedRXFysiRMnqmHDhnJzc1Pr1q2Vmppq7rfZbNq+fbsmTpwom82m8ePHl3qcC+83YsQI1a5dW3Xr1tULL7wgwzDMmk8++UQRERHy8vKSv7+/Bg0apGPHjpXxCZfuq6++Utu2beXu7q4//elP5ucpyfzs+/btK5vNZj7fuXOnunbtKi8vL3l7e6tt27batm1bhd4XAPA7AhkAoNI5OTnp1Vdf1TvvvKPDhw9f1bFWrlypI0eOaO3atXrjjTc0fvx4xcbGqk6dOtq8ebOGDx+u4cOHKyMjw+F1zz77rBITE/X999+rQ4cO6tWrl06cOCFJyszMVOfOndW6dWtt27ZNqampOnr0qPr16+dwjI8++kjOzs765z//qVmzZpXa31tvvaWpU6dqypQp+te//qXo6Gj16tVL+/fvN9+rRYsWSkxMVGZmppKSkso81wvvt3nzZr399tt688039be//c3cf+7cOb300kvauXOnFi9erIMHD2rYsGHl/iy/++47PfDAAxo5cqR2796tWbNmae7cuXrllVckSVu3bpUkffjhh8rMzDSfDx48WA0bNtTWrVu1fft2Pf/883JxcSn3+wIALmIAAFCJhg4davTu3dswDMNo37698dBDDxmGYRiLFi0yLv5naNy4cUZYWJjDa998800jKCjI4VhBQUFGUVGRuS04ONi46667zOfnz583PD09jQULFhiGYRgHDx40JBmTJk0yawoLC42GDRsar732mmEYhjF27FgjKirK4b0zMjIMSca+ffsMwzCMzp07G61bt77s+QYEBBivvPKKw7bbb7/dePzxx83nYWFhxrhx4y55nM6dOxshISFGcXGxue25554zQkJCynzNli1bDEnG6dOnDcMwjFWrVhmSjOzsbMMwDOPDDz807Ha7WX/XXXcZr776qsMx5s2bZzRo0MB8LslYtGiRQ42Xl5cxd+7cS/YPACgfZsgAANfNa6+9po8++ki7d+++4mO0aNFCNWr83z9f9evXV8uWLc3nTk5Oqlu3bolL9yIjI82fnZ2dFRERoT179kiStm/frlWrVqlWrVrmo1mzZpJ+v9/rgoiIiEv2lpubqyNHjqhjx44O2zt27Gi+V0W0b9/eYeGTyMhI7d+/X0VFRZKk77//Xr1791ZQUJC8vLzUpUsXSVJ6enq5jn/h0smLzzshIUGZmZk6c+ZMma8bNWqUHnnkEd1zzz2aNGmSw2cEAKgYAhkA4Lrp1KmToqOjNWbMmBL7atSo4XB/lCQVFhaWqPvjpXE2m63UbcXFxZft50LYKS4uVlxcnNLS0hwe+/fvV6dOncx6T0/Pyx7z4uNeYBjGNV9RMj8/X1FRUapVq5Y++eQTbd26VYsWLZJU/gVHiouLNWHCBIdz/uGHH7R//365u7uX+brx48frxx9/VM+ePbVy5Uo1b97cfG8AQMU4W90AAODmMmnSJLVu3VpNmzZ12F6vXj1lZWU5hJdr+d1hmzZtMsPV+fPntX37do0YMUKS1KZNGy1cuFCNGzeWs/OV/9Po7e2tgIAArV+/3iHIbdiwQXfccccV9fzH57fddpucnJy0d+9e/frrr5o0aZICAwMlqcILa7Rp00b79u3TrbfeWmaNi4uLOSN3saZNm6pp06Z65plnNHDgQH344Yfq27dvhd4fAMAMGQDgOmvZsqUGDx6sd955x2F7ly5ddPz4cb3++us6cOCA3n33XX377bfX7H3fffddLVq0SHv37tUTTzyh7OxsPfTQQ5KkJ554QidPntTAgQO1ZcsW/fzzz1q2bJkeeuihUsPIpTz77LN67bXX9Nlnn2nfvn16/vnnlZaWpqeeeqrCPWdkZGjUqFHat2+fFixYoHfeecc8TqNGjeTq6qp33nlHP//8s5YsWaKXXnqpQsd/8cUX9fHHH5szXnv27NFnn32mF154waxp3LixVqxYoaysLGVnZ+vs2bMaMWKEVq9erV9++UX//Oc/tXXrVoWEhFT4/AAABDIAgAVeeumlEpcnhoSEaMaMGXr33XcVFhamLVu2XHIFwoqaNGmSXnvtNYWFhWndunX6+9//Ll9fX0lSQECA/vnPf6qoqEjR0dEKDQ3VU089Jbvd7nC/WnmMHDlSiYmJSkxMVMuWLZWamqolS5botttuq3DPQ4YM0dmzZ3XHHXfoiSee0JNPPqlHH31U0u8zinPnztUXX3yh5s2ba9KkSZoyZUqFjh8dHa2vv/5ay5cv1+2336727dvrjTfeUFBQkFkzdepULV++XIGBgQoPD5eTk5NOnDihIUOGqGnTpurXr59iYmI0YcKECp8fAECyGX/8FxEAAFiuS5cuat26taZNm2Z1KwCASsQMGQAAAABYhEAGAAAAABbhkkUAAAAAsAgzZAAAAABgEQIZAAAAAFiEQAYAAAAAFiGQAQAAAIBFCGQAAAAAYBECGQAAAABYhEAGAAAAABYhkAEAAACARf4/dXxqIbL+8eQAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "result_profits = np.empty(shape=(7, 1), dtype=int)\n", "\n", "_, ax = plt.subplots(figsize=(10, 5))\n", "\n", "for i in range(7):\n", " result_profits[i] = mean_profit(i)\n", "\n", " print(\n", " f\"When there are {i} pallets in the plane:\\n The mean of the profit is ${mean_profit(i).round(2)}.\"\n", " )\n", " ax.bar(i, result_profits[i], color='blue', width=0.5)\n", " ax.set(title='Mean Profit of each scenario',\n", " xlabel='Number of pallets',\n", " ylabel='Mean Profit',\n", " ylim=(np.min(result_profits) - 500, np.max(result_profits) + 500))\n" ] }, { "cell_type": "code", "execution_count": 254, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Hence the highest profit is $16770,when there are 2 pallets assembeld in the plane.\n" ] } ], "source": [ "print(\n", " f\"\\nHence the highest profit is ${np.max(result_profits)},when there are {np.argmax(result_profits)} pallets assembeld in the plane.\"\n", ")\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Problem 2\n", "\n", "### You run a newspaper stand. You cannot predict exactly how many copies of the Daily Blab newspaper you will be able to sell, but in the past, you have observed the following demand pattern:\n", "\n", "\n", "\n", "|Demand|Percentage of the Time|\n", "|:-:|:-:|\n", "| 20 | 1% |\n", "| 21 | 2% |\n", "| 22 | 3% |\n", "| 23 | 4% |\n", "| 24 | 5% |\n", "| 25 | 6% |\n", "| 26 | 6% |\n", "| 27 | 7% |\n", "| 28 | 7% |\n", "| 29 | 7% |\n", "| 30 | 7% |\n", "| 31 | 7% |\n", "| 32 | 7% |\n", "| 33 | 6% |\n", "| 34 | 5% |\n", "| 35 | 4% |\n", "| 36 | 4% |\n", "| 37 | 3% |\n", "| 38 | 3% |\n", "| 39 | 3% |\n", "| 40 | 3% |\n", "\n", "#### Each copy of the Daily Blab costs you $0.35 and sells for $0.45. You must place your order for the papers the night before they are sold, before you know exactly how many copies you will be able to sell. Unsold copies may be returned to the publisher at the end of the day for a credit of $0.05 each. You can buy the paper only in multiples of 5, and are considering stocking either 20, 25, 30, 35, or 40 papers per day. What is the right number of papers to order each night?\n" ] }, { "cell_type": "code", "execution_count": 255, "metadata": {}, "outputs": [], "source": [ "n = np.arange(20, 41)\n", "\n", "percent_demand = pd.DataFrame(\n", " [0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.06, 0.07, 0.07, 0.07, 0.07, 0.07,\n", " 0.07, 0.06, 0.05, 0.04, 0.04, 0.03, 0.03, 0.03, 0.03\n", " ], index=n)\n" ] }, { "cell_type": "code", "execution_count": 256, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAg0AAAIHCAYAAAAcg2/yAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABArklEQVR4nO3de3iU5bn2/3MM2SgK1tBmowGCokSjoolisBGqEgTcQFGxVfBVosawFpIsWghxl4DGKsVIBbKUpOhbq3SVvqtW0kq0wkKTFoEEBCJqgQQ1EYIaEDTb6/cHv8xizJDcExJa9fs5jjkOcs/1XNzPZCZzzv08M+MxMxMAAEAnTvhnTwAAAHwzEBoAAIATQgMAAHBCaAAAAE4IDQAAwAmhAQAAOCE0AAAAJ4QGAADghNAAAACcEBoAAICTLoWGxYsXKzY2VmFhYUpISNDatWs7rF+zZo0SEhIUFhamQYMGqaCgoF1Nfn6+zjnnHJ144omKiYlRRkaGvvrqq65MDwAA9ICAQ8Py5cs1Y8YMZWdnq7y8XMnJyRozZoyqq6v91u/cuVNjx45VcnKyysvLNWfOHE2fPl0rVqzw1rzwwguaPXu2HnroIVVWVqqwsFDLly9XVlZW1/cMAAB0K0+gX1g1bNgwXXzxxVqyZIl3LC4uTuPHj1deXl67+lmzZunll19WZWWldywtLU2bNm1SWVmZJOnf/u3fVFlZqddff91b8x//8R9at25dp6sYAADg+OgVSHFjY6M2bNig2bNn+4ynpKSotLTU7zZlZWVKSUnxGRs9erQKCwvV1NSk4OBg/fCHP9RvfvMbrVu3Tpdeeql27Nih4uJi3X777UedS0NDgxoaGrw/t7a26tNPP1V4eLg8Hk8guwUAwHeamenAgQOKjo7WCScc/SBEQKGhrq5OLS0tioiI8BmPiIhQbW2t321qa2v91jc3N6uurk5RUVG65ZZbtHfvXv3whz+Umam5uVn33ntvu3BypLy8POXk5AQyfQAA0IHdu3frjDPOOOr1AYWGNl9/JW9mHb6691d/5Pjq1av1yCOPaPHixRo2bJg++OAD3XfffYqKitIDDzzgt2dWVpYyMzO9P9fX16t///7avXu3+vTp05XdAgDgO2n//v2KiYnRKaec0mFdQKGhX79+CgoKareqsGfPnnarCW0iIyP91vfq1Uvh4eGSpAceeECTJ09WamqqJOn888/XwYMHdffddys7O9vvUkloaKhCQ0Pbjffp04fQAABAF3R2eD+gd0+EhIQoISFBJSUlPuMlJSUaPny4322SkpLa1a9atUqJiYkKDg6WJB06dKhdMAgKCpKZKcDzNAEAQA8J+C2XmZmZWrp0qYqKilRZWamMjAxVV1crLS1N0uHDBlOmTPHWp6WlqaqqSpmZmaqsrFRRUZEKCws1c+ZMb811112nJUuW6KWXXtLOnTtVUlKiBx54QNdff72CgoK6YTcBAMCxCvichkmTJmnfvn3Kzc1VTU2N4uPjVVxcrAEDBkiSampqfD6zITY2VsXFxcrIyNCiRYsUHR2thQsXauLEid6a+++/Xx6PR/fff78++ugjff/739d1112nRx55pBt2EQAAdIeAP6fhX9X+/fvVt29f1dfXc04DAAABcH0O5bsnAACAE0IDAABwQmgAAABOCA0AAMAJoQEAADghNAAAACeEBgAA4ITQAAAAnBAaAACAE0IDAABwQmgAAABOCA0AAMAJoQEAADghNAAAACeEBgAA4ITQAAAAnBAaAACAE0IDAABwQmgAAABOCA0AAMAJoQEAADghNAAAACeEBgAA4ITQAAAAnBAaAACAE0IDAABwQmgAAABOCA0AAMAJoQEAADghNAAAACeEBgAA4ITQAAAAnBAaAACAE0IDAABwQmgAAABOCA0AAMAJoQEAADghNAAAACeEBgAA4ITQAAAAnBAaAACAE0IDAABwQmgAAABOCA0AAMAJoQEAADghNAAAACeEBgAA4KRLoWHx4sWKjY1VWFiYEhIStHbt2g7r16xZo4SEBIWFhWnQoEEqKCjwuX7kyJHyeDztLuPGjevK9AAAQA8IODQsX75cM2bMUHZ2tsrLy5WcnKwxY8aourrab/3OnTs1duxYJScnq7y8XHPmzNH06dO1YsUKb80f/vAH1dTUeC9btmxRUFCQbrrppq7vGQAA6FYeM7NANhg2bJguvvhiLVmyxDsWFxen8ePHKy8vr139rFmz9PLLL6uystI7lpaWpk2bNqmsrMzv/5Gfn68HH3xQNTU16t27t9O89u/fr759+6q+vl59+vQJZJcAAPhOc30ODWilobGxURs2bFBKSorPeEpKikpLS/1uU1ZW1q5+9OjRWr9+vZqamvxuU1hYqFtuuaXDwNDQ0KD9+/f7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qq6u9lu/c+dOjR07VsnJySovL9ecOXM0ffp0rVixwltTVlamSZMmafLkydq0aZMmT56sm2++WX//+9+7vmcAAKBbBRwaFixYoKlTpyo1NVVxcXHKz89XTEyMlixZ4re+oKBA/fv3V35+vuLi4pSamqo777xT8+fP99bk5+dr1KhRysrK0pAhQ5SVlaWrrrpK+fn5Xd4xAADQvXoFUtzY2KgNGzZo9uzZPuMpKSkqLS31u01ZWZlSUlJ8xkaPHq3CwkI1NTUpODhYZWVlysjIaFfTUWhoaGhQQ0OD9+f6+npJ0v79+33qWhsOdbpfbb6+bUd6qm9P9qYvfY9Xb/rS93j1pm/39G0bM7OON7YAfPTRRybJ3nrrLZ/xRx55xM4++2y/2wwePNgeeeQRn7G33nrLJNnHH39sZmbBwcH2wgsv+NS88MILFhISctS5PPTQQyaJCxcuXLhw4dJNl927d3eYAwJaaWjj8Xh8fjazdmOd1X99PNCeWVlZyszM9P7c2tqqTz/9VOHh4R1uJx1OVDExMdq9e7f69OnTYW0g6NuzfXuyN33pe7x605e+x6t3IH3NTAcOHFB0dHSHdQGFhn79+ikoKEi1tbU+43v27FFERITfbSIjI/3W9+rVS+Hh4R3WHK2nJIWGhio0NNRn7NRTT3XdFUlSnz59uv2XT9+e79uTvelL3+PVm770PV69Xfv27du305qAToQMCQlRQkKCSkpKfMZLSko0fPhwv9skJSW1q1+1apUSExMVHBzcYc3RegIAgOMv4MMTmZmZmjx5shITE5WUlKRnnnlG1dXVSktLk3T4sMFHH32k559/XpKUlpamp59+WpmZmbrrrrtUVlamwsJCvfjii96e9913n6644gr94he/0A033KA//vGPeu211/Tmm292024CAIBjFXBomDRpkvbt26fc3FzV1NQoPj5excXFGjBggCSppqbG5zMbYmNjVVxcrIyMDC1atEjR0dFauHChJk6c6K0ZPny4XnrpJd1///164IEHdOaZZ2r58uUaNmxYN+xie6GhoXrooYfaHd6g7792357sTV/6Hq/e9KXv8erdE309Zp29vwIAAIDvngAAAI4IDQAAwAmhAQAAOCE0AAAAJ4QGAADghNCAHtVTb875Jr3pp7W1tcd6f5NuB+B44/HR/QgN30DfhAdC2zeQejyebp3vJ5984u3bnT755BPV1dV1a09J2rlzp5YuXaqWlpZuvR3agkh33w7At8HBgwcl9ezj45vwd7gnfOdCQ3V1tVauXKmlS5eqpqbGe+c6Vl999VW39PHnk08+0dtvv60//elPkrrvibi6ulq///3vtWDBAn344YfH3K/N9u3blZqaqjfeeENS981306ZNGjp0qP76178ec68jvfPOO7r88sv1wgsv6Isvvui2vps3b9a5556rnJwcSd13O7z//vt68MEHdfvtt+v555/Xvn37jrlnm927d+u1115TUVGRPvnkEx065P51u4H6Lv7RNTO1tLR0e99PP/1Ue/fu7fa+0uHH81tvvdXtfT/44AP993//txobG7u17/bt25WWltatf9Mk6dChQ/rss8+8f+v/1QPJ0Z7rjrl3h9+B+S2zadMmi4iIsIsuushOPfVUi4mJsZkzZ9qOHTuOqe+WLVvssssus9WrV3fTTP/X5s2b7YILLrDzzjvPTj75ZEtMTLRDhw6ZmVlra+sx9R04cKANHz7cTjvtNIuNjbWamppjnm9DQ4P9+Mc/No/HY7fffrvP16gfy3wrKiosLCzMfv7zn7e77lj6bt++3cLDw+1nP/uZ7du3r8t9vq6iosJOOukku+222/x+PXxXbd682cLDw+3mm2+2yy67zOLj4+2VV17plt6bNm2yqKgoGzFihEVHR9vAgQNt1qxZnX5Vbmfeffddy8jIsEmTJlleXp5t2LDBe92x/O4++eQT++yzz45pbv7s2LHDFixYYJmZmfbSSy91W9/t27fbfffdZ+PGjbOcnByrq6vrlr7/+Mc/bNCgQfbAAw/YRx991C0925SXl9tJJ51kCxcu7Na+mzdvtoiICLv33nvt448/7ra+FRUVduKJJ5rH47Ff//rX3dZ3y5YtNnbsWIuLi7MbbrjBVq5c2S193333XZs9e7ZNnjzZnnjiCSsvL/dedyyPjc6e646l93cmNHz22WeWkJBgP/vZz+zTTz81M7OcnBxLTk6266+/3t5///0u9d21a5cNGTLEQkJC7PTTT7e1a9d225zfe+89i4iIsDlz5lhlZaW9++67NmTIEJs8efIx9X333XftBz/4gT3wwAP26aefWmtrq0VHR9vzzz/fLfOeO3eujRs3zoYMGWLXXnut/c///M8x9du6dauFhYXZww8/bGaH7/BVVVW2bt06a2xsPKYHwMyZM+0nP/mJmZm1tLTYf//3f9sTTzxhr7/+epf/mFVUVFjv3r0tOzvbzMxuueUWGzVqlDU1NXV5nmZme/bssaFDh9r999/vHRs5cmS3BJKamhqLj4+3hx9+2Pbv329mZtOmTTOPx2MTJkywDz74oEt9t27dan379rVrr73WbrvtNouMjLTk5GT75S9/6a3pyu9v27ZtFhISYjfeeKPV19d3aW7+bN682c444wy7+uqrbfjw4XbCCSfY448/3i19f/CDH9iNN95o99xzj4WEhHjvz8dqyZIl5vF47KKLLrJHHnnEJ/y3trZ2+fHRFnz/4z/+46g1XeldVVVl/fv39/sC4Fj6tgWGn//85zZz5kxLTk7ulhdCW7dute9973s2bdo0KygosMsvv9xuu+22Y57v1q1b7dRTT7WbbrrJ0tLSLDo62oYOHWpLliw5pr6uz3VdvV98Z0JDVVWVDRgwwF599VWf8eeee86uuOIK++lPfxrwk0RjY6P98pe/tPHjx9vmzZvtxhtvtH79+nVLcDh48KDdfvvtds8991hzc7N3/Je//KX98Ic/7HLfAwcO2OTJk+3f//3frbm52XvHuf766y0vL89mzZplr732mu3duzfg3m29nnzyScvNzbWdO3faOeecYxMmTLBt27bZrFmzbPv27QH1/Pzzz2348OEWExPjHbv55pstPj7ewsLCbPDgwbZ06VL7/PPPA56vmdk111xjCxYsMDOzyy+/3IYPH25nnHGGxcfHW0pKir377rsB9fvHP/5hHo/HGxjMzNauXWsej8dWrFjRpTm22bx5s51zzjm2fv1679gdd9xh/+f//B+79tpr7aGHHgp4vm1KS0tt6NChtmPHDu/9bceOHRYbG2uXXHKJ3X777QGvxDQ2NtqUKVNs6tSp3rGqqipLS0uziy++2ObNm+cdD+QPWG1trV1++eV21VVXWb9+/eymm27qluCwa9cuO+uss+znP/+59zYoLCy0yMjILr+oMDt8Ow4cONCysrK8Yw8//LClp6dbY2OjT21X/pBv2rTJbr/9dps3b55FR0fb3Llzj3kF5r333rPQ0FDv/bixsdH+8Ic/2K9+9St76aWX7JNPPuly7z/96U82duxYb9/s7GybMGGCpaam2nPPPeetC+S2WL9+vfXp08fmzJljZmYvvvii9e3b1958800zO/yCoCsOHTpk48ePt/vuu8879sc//tF+/OMf2yeffGIHDhzo0nwPHDhgo0eP9glO1dXVduqpp1pkZOQxvRDoiee6I31nzmkICgrSiSeeqI8//liS1NzcLEmaMmWKbr31Vm3ZssX79dzmeMwnODhYF1xwgSZPnqzzzz9fv/vd7zRixAhNmDDhmL+hMywsTCeeeKLOOussBQUFeceHDh2qXbt26fPPP1dTU1PAfU8++WRde+21uu222xQUFCSPx6O5c+equLhY69ev1+rVq3X33XersLAw4LP+247xXXHFFVq/fr0GDhyo3//+99q+fbuuueYaLV682Hvbut7Gffv21YQJEzR48GDdfvvtSkxM1KFDh5Sbm6tNmzZp+PDheuyxxwL+3bWJiYlRVVWV8vLy1Lt3b/3ud79TVVWVcnNz5fF49NhjjwV0vsqgQYNUVFSkefPmSZJaWlo0bNgwjR8/Xr/97W914MCBgOZ3pC+//FJNTU36+9//rr179yovL0+/+c1v1L9/f/Xr10+lpaWaOXNml07orK2t1YcffqiTTz7Ze3/bu3evzjjjDI0cOVKrV6/W1q1bJQX2+KipqfH5nffv318PPvigrrjiCr3yyit64YUXJLkfHzYzlZeXa8CAAcrLy9PKlSv1+uuvKzU1Vfv37w90t71aW1v10ksv6ayzztKcOXO8t8Gll16q4ODgLp+H0NLSohUrVmjMmDGaPXu2d/zDDz9UeXm5Lr/8ct17770+5ysFysxUWlqqOXPm6J577tEzzzyj5557Tj/+8Y+VnZ0dcL/m5mY9/fTTOvnkkzV06FBJ0g033KCcnBw99dRTmjx5slJTU7V69eqAe0vSxo0b9emnn0qSxo4dq7feekv9+/dXVVWVnnzySc2ZM0eS221hZjp48KBGjBihqVOn6pFHHpEk3XLLLUpMTNSDDz6o5uZmnXBC157qQkNDVVdXp9NOO807tnbtWm3cuFEJCQm64YYblJWV5TzfNieccII+/fRT7+176NAhxcTE6Oqrr9Z5552nlStX6s9//nOX5uzxeJyf67r0zq4ux41voOuuu86GDh3qTeFHLhffeOONlpSUdMz/R1NTk3fFoS3lNjU1WUlJiXepqDNtibXt3IUjx1avXm2DBw/2WX348MMPnZK0vyS8adMmi4uLsz/96U/e2+Pee++1c845x7744gun+X69d0VFhZ111lneV3/XXXedBQcH28iRI+3tt9927nnkPj311FN27rnn2jXXXNMuJY8ePTrg1Ze22+/RRx+1Cy+80CZOnGiPPfaYT81TTz1lAwcOdD723NHhh8WLF1vfvn29KwFdfeVz++232+DBg+3KK6+0k046yV5++WXvdS+88IKdfvrptnHjxoD7fvXVV3bWWWfZ6NGj7fXXX7dXX33VevfubQ8++KCZmSUlJdk999wTUM+Ghga74447bPz48fbll19aa2urd7+rqqpszJgxdv311wc8108++cTeeOMN789lZWV22mmn2U033eSz4hToq/bVq1f7rAaYHf49xcbG+vx/gaqurraysjLvz3PnzrWgoCDLzs62hQsX2iWXXGJXXXXVMS2lp6Sk2M6dO83M7PHHH7fevXtb3759273adLV9+3a7++677dJLL7WYmBgbN26cbd++3Zqbm+2dd96x8847zyZOnNil3iUlJTZy5EhbunSpjRo1yj788EMzO7yqmJOTY5dddplt3bo1oJ5HnpfW9th+9tln7eyzz/aeQ9OVx9xnn31mo0ePtvHjx9vTTz9tWVlZduKJJ9qvf/1r+/Of/2w5OTl28cUX2x//+MeA+tbU1Fh0dLTPoa/du3fbueeea88995xdcMEFlpqa6tzv448/9rnNrr322h57rvvWhoYvvvjC9u/f77NsuXfvXouNjbVRo0ZZQ0ODT/2zzz5rl112Wbtxl75mvn+gGhsbvcHhjTfesHvuuceGDBnS6ZLe0XofeWdfvXq1nXnmmd7/b+bMmTZy5Eg7ePBgwH3NzOrr670nT7UtlT733HN24YUXeo9tB9r3q6++sgkTJtiXX35pd9xxh51xxhn24osv2vnnn28jR460v//9713q+/zzz9srr7zi3fe2B8Ls2bOdQsPR+iYnJ5vH47EpU6b4LBdv3LjRzj333E5PBOzo9j3yfjFs2DC75ZZbnJ/MjtZ327Zt9uabb9qQIUNs165dPuODBw+2devWdan3pk2b7IILLrCoqCiLioqyWbNmea+78cYbfQ4zHM2+ffussrLS3nvvPTM7/IQeFBRkTz31lLem7f68bt0683g8Pid/ddR327Zt7Q5vtT1B/O1vf/MGh/r6emtsbLTFixfbqlWrutS37XfU2tpqgwYN8unz2muv2Z49e7rUt66uzmbMmGF//vOfvWPbtm0zj8fjM9ZR37bb98j76ogRI7xL+1OnTrU+ffpYZGSkPf74484nR7bNuS3Y7t692yZPnmzXXnut9/fZ5rXXXjOPx2ObN28OaM4tLS22c+dOi46OtnPPPdeuvvpqn9rq6mo76aST7Le//a1T361bt9r27dvtq6++anf9gQMHLCYmxqZNm9ZpL3/zbfvdlZeX29ixY+2nP/2pnXPOOVZYWOitra2ttf79+1teXp5z37bb99lnnzWPx2N33nmn3X///XbKKafYXXfdZWZm//Vf/+V9wdJZ2Pnwww8tPDzcJkyY4A2ne/futYEDBx7Tc93RfCtDw9atWy0lJcUuuugii46Ott/85jfeG76srMxiYmJsxIgR9u6779qXX35pZmZ33XWXjRo1yu+dr6O+Zv5f0TQ1NdlNN91kHo/HTj755E5fYR+t99eVlpZadHS0NTU12Zw5c+zEE0+0v/3tb8c056/Pf9q0aXbTTTd5b5tA59va2mpXXnml9e7d2yIjI737vmHDBrvkkkusuro6oL5Hrqp8/RiwmdnkyZPtnnvusZaWlqM+Ifvr2xY62o6Rn3zyyVZQUOA9dj9r1ixLTEzs8HwJ1/tEa2urzZ071+Lj472vrDrS2e1QXl5u8fHxVlVV5R2bPXu2nX/++Z0+oXV2X3vvvfd8juG3tLTYDTfc4D0H4Wi38TvvvGMXXXSRnX/++RYcHOw90e+JJ56wE044wZ555hmf+m3bttl5553X6XkuR/YNCQmxuXPnWlNTU7t5/P3vf7fTTjvNbr75ZrvjjjssODi4wxM4O+vb2NhoX3zxhZ111lnex1hWVpZ5PJ4On4j99T3yd9cW8NtWXrZs2WIJCQmdPgEf2Tc0NNTmzp3rfYzOmjXLnn/+efv3f/93i46Oth07dtijjz5qJ510kv3yl7/0+f9d5pyTk2Nmh8/z+Mtf/uJ93LWdWPnKK6/YOeec0+kLoa/3bbtPvPzyy9arVy/7wQ9+YKWlpd76hoYGu/LKK+0vf/lLwLfFkfvY9u9FixbZmWee6XMekGvfI+/DBw4csObmZktKSrLly5d76xsbG23UqFG2aNEi7+3j0jc3N9caGxutqKjILr30UrvmmmvsF7/4hbf+V7/6lV100UVOLzD++te/Wq9evezKK6+0KVOmeF80lJWVWVRUlF1++eUBP9d15FsXGrZu3Wrh4eGWkZFhv/3tby0zM9OCg4N9lmzfeecdO//88+3MM8+0xMREu+666+yUU06xioqKgPse7VVSc3Oz3X333Xbaaad1utQWSO8333zTLrzwQsvIyLCQkBCft68d65wPHTpk999/v/Xr16/DObv0/fWvf23jxo3zPljbQltnoSyQ+X755ZeWnZ1t3//+9zs8AdDlPnHgwAEbNWqUDR482CIjI23UqFEWHh7e4avgQOf72Wefmcfjsblz5x61p2vf1tZWi4uLs7i4OLvzzjvttttu63S+rrfFkfbu3WuzZs2y8PDwdq82/fWdOXOmbd261ebPn28ej8eqq6utqanJHn74YfN4PJaVlWXr16+3vXv32uzZs23QoEFWW1vbpb5Hart/vfnmm+bxeOy0005zemx01LelpcUOHjzofdLJzc213r17d7iS49L3608E2dnZNmzYsA7D3tH6toXGwsJC83g8FhER4fMC5Re/+EWHv7eOeretYvl7pfvzn//crrrqqk4Dtb++bYdRfvvb39oJJ5xgo0aNshdffNHef/99mz17tkVHR3f6wsLlPmF2+ATJ008/3fuk3pXboe02PnDggA0bNszmzJljn332mR04cMAeeOABi4qK6vBt+1/v+8QTT/j0PXToULtX/f/2b/9mN954o/ewXkf27dtn119/vf3nf/6nXXzxxfbTn/7Utm3bZmaHVw9/+MMf2qBBg5yf6zrzrQoN+/bts5SUFJs+fbrP+I9+9CPv2JG/gKefftpmz55tOTk5HT7pBNrXzKyoqMg8Hk+nCTfQ3m3LguHh4R3+UQy071/+8hcbN26cDRgwoMNj4i59zQ4/Qfp7B8bRHgCBznflypV21VVXdXoM36XvkasXr776qj355JP261//2v7xj38cU98j59v2yuexxx6zysrKbpnvF198YT/5yU9s3LhxNnXqVO8fiu6a87Zt2+xnP/uZ9e/fv8PbeO/evXbFFVf4nGHe2tpqo0ePttLSUquoqLCqqip7+eWXLSoqyiIjI23IkCGd/u6O1veaa66x0tJSKy8v93mi+OqrrywtLc1OOeWUDkOvS98jD0kNHTrULrnkEgsJCelwxTDQvlu2bLH777/f+vTpY5s2bepS37feesvKy8vt9ddft/nz53ufDFyP33fWe+PGjT638ebNmy07O9v69OnT4cpIZ303bNhgBw8etA0bNlhSUpJ9//vftyFDhtjZZ5/drfcJs8PnAZ1zzjkdvj27s74bNmywQ4cO2apVq8zj8djgwYNt2LBhnf697Oix8eabb9rGjRt9Vgu3bdtmM2bMsFNOOcXp0E9zc7Pt2bPHzj77bPvwww/tD3/4g11yySWWmppqw4cPtylTppiZ2cKFC52e61x8q0JDbW2tXXrppd7PBWh74EydOtVuvfVWb11nS3Vd7Xukt99+25uou7N3fX29paSkdPhHpit9Dx06ZPPnz+/0VYlL3668bSzQ+R48eNDmzZvX6QPgX+k+YdbxyZKB9P36k4LLZ0B0Zc6rV6/u8FWf2eHj9I8++qjPfSc3N9c8Ho9deOGFFhMTYykpKfaPf/zDPv74Y1uzZo2tWrWq08M0HfUdOnSonXHGGTZ69GjvW5zXrVtn559/fqfndLj2Xb16tX3xxRfWt29fCw4O7vSPeCDzra2ttQkTJth5553X6au+zm7f/v3727XXXtulkx4DmfPHH39so0ePtrPOOqvTFa3O5nz66afb1Vdfbdu3b7cDBw7Ye++9Z5s2ber0rd6B3ifMDt8vOvsAv876ts333XfftXXr1tm8efPsmWee6fRvfCDz/eqrr2zhwoX2ox/9yOk8H7P//Vt76623eg/prFy50vr162cnn3yyPfvss059AvGtCg1m5vPLaXtF9uCDD7b7QKQjT/JzeZLrSt/unnPbUqC/4/rH0jfQ97i79j3yPczf5fn+q9wOPdn7yPv9iy++aB6Px1566SXbt2+frV692hITE73vxOiuvmvWrLFLL73Ue9y5vr7e+R1KLn0feughMzNbvny5bdmypdvnu2XLFudP2+yo7xtvvOHTN1CBzLlt1ag7+iYmJnpv456ab3f2veSSS3r8PlxXV+d8Hz7SlClTbPbs2WZ2+EXA9773PTv33HPtzjvv9HnnzrF8EF6bXl16I+i/sMGDB0s6/P7T4OBgSYffK932RUeSlJeXp9DQUE2fPl29evVyen9tV/p295xDQkJ03333eWv+WXOm7zezb0/2PuWUU7z/TkpK0vr163XxxRdLkkaMGKGoqCiVl5c7z9Ol7xVXXKGIiAht2LBBktSnT58e6XvzzTd3a9/169dLks4777xu6Tty5Eif+QYqkDlfeOGF3dY3KipKGzdu7JH5duW26KxvZGRkj8237fYNDw8PqLeZyePx6Morr9SOHTuUnp6u4uJibdiwQRUVFfrZz36mkJAQXXTRRQoNDe2W78v41oWGNieccIL3BvV4PN4Pa3nwwQc1b948lZeXB/THtqf7fhPnTN9vZt+e7j1gwAANGDBA0uE/ao2NjTr55JMVHx/fpX70PT59v4lz/q73bQsBsbGxuuOOOxQREaFXXnlFsbGxio2Nlcfj0YUXXqjQ0NBjmveRvtWfCGn//yfRBQUFKSYmRvPnz9fjjz+u9evXB5SYj1ffb+Kc6fvN7NvTvdt4PB498sgjeuutt3TTTTd1S0/69nzfnuxN3+7vm5SUpKVLl+rVV19VQkKC97E9fvx4xcbGdsd0/9cxH+D4Bpg3b555PB7r27dvQJ9I+M/q25O96Uvf49X7v/7rv2zatGkWHh7epU+ppO8/p29P9qZvz/Xt6qfMBuo7ERrefvtt83g8AX806T+rb0/2pi99j1fvLVu22M0330zfb1jfnuxN357tezx4zAL8hp9vqIMHD6p3797fmL492Zu+9D1evZuampxP3KXvv07fnuxN357t29O+M6EBAAAcm2/1iZAAAKD7EBoAAIATQgMAAHBCaAAAAE4IDQAAwAmhAQAAOCE0AAAAJ4QGAADghNAAAACc/H8+gwZUkTXIMgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "_, ax = plt.subplots(figsize=(6, 6))\n", "\n", "percent_demand.plot.bar(ax=ax)\n", "\n", "ax.set(ylim=(0, 0.08))\n", "ax.set_xticklabels(percent_demand.index, rotation=45)\n", "\n", "plt.legend().remove()\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": 257, "metadata": {}, "outputs": [], "source": [ "N = 10000 # number of trials\n" ] }, { "cell_type": "code", "execution_count": 258, "metadata": {}, "outputs": [], "source": [ "news_rvs = rv_discrete(name='news_rvs',\n", " values=(n, percent_demand[0])).rvs(size=N)\n", "\n", "news_20 = news_rvs[news_rvs == 20]\n", "news_25 = news_rvs[news_rvs <= 25]\n", "news_30 = news_rvs[news_rvs <= 30]\n", "news_35 = news_rvs[news_rvs <= 35]\n", "news_40 = news_rvs\n" ] }, { "cell_type": "code", "execution_count": 259, "metadata": {}, "outputs": [], "source": [ "profit_20 = news_20 * 0.45 - 20 * 0.35\n", "profit_25 = news_25 * 0.45 - 25 * 0.35 + (25 - news_25) * 0.05\n", "profit_30 = news_30 * 0.45 - 30 * 0.35 + (30 - news_30) * 0.05\n", "profit_35 = news_35 * 0.45 - 35 * 0.35 + (35 - news_35) * 0.05\n", "profit_40 = news_40 * 0.45 - 40 * 0.35\n" ] }, { "cell_type": "code", "execution_count": 260, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2.0\n", "1.8355\n", "1.5234\n", "0.9199\n", "-0.5004\n" ] } ], "source": [ "means = []\n", "\n", "for profit in (profit_20, profit_25, profit_30, profit_35, profit_40):\n", " means.append(np.mean(profit))\n", " print(round(profit.mean(), 4))\n" ] }, { "cell_type": "code", "execution_count": 261, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "_, ax = plt.subplots(figsize=(6, 6))\n", "\n", "plt.plot(means, 'o-')\n", "\n", "ax.set_xticks(range(len(means)))\n", "ax.set_xticklabels(['20', '25', '30', '35', '40'])\n", "\n", "plt.show()\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Ans:\n", "\n", "### We should order 20 newspapers each night to make the mean profit by 2 dollars.\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Problem 3\n", "\n", "You are taking reservations for an airline flight. This particular flight uses an aircraft with 50 first- class seats and 190 economy-class seats.\n", "\n", "First-class tickets on the flight cost $600, with demand to purchase them distributed like a Poisson random variable with mean 50. Each passenger who buys a first-class ticket has a 93% chance of showing up for the flight. If a first-class passenger does not show up, he or she can return their unused ticket for a full refund. Any first class passengers who show up for the flight with tickets but are denied boarding are entitled to a full refund plus a $500 inconvenience penalty.\n", "\n", "Economy tickets cost $300. Demand for them is Poisson distributed with a mean of 200, and is independent of the demand for first-class tickets. Each ticket holder has a 96% chance of showing up for the flight, and \"no shows\" are not entitled to any refund. If an economy ticket holder shows up and is denied a seat, however, they get a full refund plus a $200 penalty. If there are free seats in first class and economy is full, economy ticket holders can be seated in first class.\n", "\n", "The airline allows itself to sell somewhat more tickets than it has seats. This is a common practice called \"overbooking\". The firm is considering the 18 possible polices obtained through all possible combinations of:\n", "\n", "- Allowing overbooking of up to 0, 5, or 10 first-class seats\n", "- Allowing overbooking of up to 0, 5, 10, 15, 20, or 25 economy seats\n", "\n", "1. Which option gives the highest average profit?\n", "2. What are the average numbers of first-class and economy passengers denied seating under this policy.\n", "3. If no overbooking of first class is allowed, what is the best policy?\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Part3-Problem 1\n", "\n", "### You make a perishable, volatile chemical for which you charge $2.25 per liter.\n", "\n", "You have 75 regular customers for the chemical, each of whom has an independent 90% chance of placing an order on any given day. You also get an average of 30 orders per day from other, non-regular customers; assume the number of non-regular customers per day has a Poisson distribution.\n", "\n", "Every order is for one 20-liter container. You produce the chemical by a process that produces 600 liters of the chemical at a cost of $1300.\n", "\n", "Each day, you can run the process any whole number of times. Because it is so unstable, any chemical left unsold at the end of the day must be recycled, at a cost of $0.35 per liter.\n", "\n", "What is the best number of times to run the process?\n", "\n", " Consider four possible policies of running the process 1, 2, 3 or 4 times.\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Define the scenarios" ] }, { "cell_type": "code", "execution_count": 262, "metadata": {}, "outputs": [], "source": [ "# produce the chemical by a process that produces 600 liters of the chemical at a cost of $1300.\n", "# Consider four possible policies of running the process 1, 2, 3 or 4 times.\n", "# The process is described by the following dictionaries:\n", "scen_param = {\n", " 1: (600, 1300),\n", " 2: (1200, 2600),\n", " 3: (1800, 3900),\n", " 4: (2400, 5200)\n", "}\n" ] }, { "cell_type": "code", "execution_count": 263, "metadata": {}, "outputs": [], "source": [ "class chemSim:\n", " \"\"\"simulate the chemical producing process for 100 days\n", " where : scen_param = { 1:(600, 1300), 2:(1200, 2600), 3:(1800, 3900), 4:(2400, 5200)}\n", " \"\"\"\n", "\n", " def __init__(self, scen_param):\n", " self.days = 100\n", " self.scen_param = {\n", " 1: (600, 1300),\n", " 2: (1200, 2600),\n", " 3: (1800, 3900),\n", " 4: (2400, 5200)\n", " }\n", "\n", " def chem_df(self, i):\n", " regular_order = stats.binom(n=75, p=0.9).rvs(size=self.days)\n", " # 75 regular customers for the chemical, each of whom has an independent 90% chance of placing an order on any given day.\n", "\n", " non_regular_order = stats.poisson(mu=30).rvs(\n", " size=self.days\n", " ) # an average of 30 orders per day from other, non-regular customers\n", "\n", " chem_prod_sim_df = pd.DataFrame({\n", " 'regular_L': regular_order * 20,\n", " 'non_regular_L': non_regular_order * 20,\n", " 'left_cost': np.zeros(self.days),\n", " 'produce': self.scen_param[i][0],\n", " 'cost': self.scen_param[i][1],\n", " 'sale': np.zeros(self.days)\n", " }) # Create the simulation dataframe\n", "\n", " # analyze the demand and the production of the chemical:\n", " chem_prod_sim_df_1 = chem_prod_sim_df.copy()\n", " # if the demand is greater than the production,all the chemicals will be sold in the end.\n", " chem_prod_sim_df_1.query(expr='regular_L + non_regular_L > produce',\n", " inplace=True)\n", " chem_prod_sim_df_1['sale'] = chem_prod_sim_df_1['produce'] * 2.25\n", "\n", " chem_prod_sim_df_2 = chem_prod_sim_df.copy()\n", " # if the demand is less than the production, there will be unsold chemicals which need to be handled in the end, the recycle fee should be considered.\n", " chem_prod_sim_df_2.query(expr='regular_L + non_regular_L <= produce',\n", " inplace=True)\n", " # actuall sale of the chemicals\n", " chem_prod_sim_df_2['sale'] = (\n", " chem_prod_sim_df_2['regular_L'] +\n", " chem_prod_sim_df_2['non_regular_L']) * 2.25\n", "\n", " # the recycle fee for the chemical left:\n", " chem_prod_sim_df_2['left_cost'] = (\n", " chem_prod_sim_df_2['produce'] -\n", " (chem_prod_sim_df_2['regular_L'] +\n", " chem_prod_sim_df_2['non_regular_L'])) * 0.35\n", "\n", " # combine the two dataframes of codndiditons together.\n", " chem_prod_sim_df = pd.concat([chem_prod_sim_df_1, chem_prod_sim_df_2])\n", " chem_prod_sim_df['profit'] = chem_prod_sim_df['sale'] - (\n", " chem_prod_sim_df['cost'] + chem_prod_sim_df['left_cost'])\n", "\n", " return chem_prod_sim_df\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Simulate the process for each of the four policies for 100 days:\n" ] }, { "cell_type": "code", "execution_count": 264, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
regular_Lnon_regular_Lleft_costproducecostsaleprofit
014006400.060013001350.050.0
113605800.060013001350.050.0
212207000.060013001350.050.0
312807000.060013001350.050.0
413804000.060013001350.050.0
........................
9513406400.060013001350.050.0
9614204800.060013001350.050.0
9713407400.060013001350.050.0
9813205800.060013001350.050.0
9914005600.060013001350.050.0
\n", "

100 rows × 7 columns

\n", "
" ], "text/plain": [ " regular_L non_regular_L left_cost produce cost sale profit\n", "0 1400 640 0.0 600 1300 1350.0 50.0\n", "1 1360 580 0.0 600 1300 1350.0 50.0\n", "2 1220 700 0.0 600 1300 1350.0 50.0\n", "3 1280 700 0.0 600 1300 1350.0 50.0\n", "4 1380 400 0.0 600 1300 1350.0 50.0\n", ".. ... ... ... ... ... ... ...\n", "95 1340 640 0.0 600 1300 1350.0 50.0\n", "96 1420 480 0.0 600 1300 1350.0 50.0\n", "97 1340 740 0.0 600 1300 1350.0 50.0\n", "98 1320 580 0.0 600 1300 1350.0 50.0\n", "99 1400 560 0.0 600 1300 1350.0 50.0\n", "\n", "[100 rows x 7 columns]" ] }, "execution_count": 264, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 1 time of the producing proces in 100 days.\n", "chemSim(1).chem_df(1)\n" ] }, { "cell_type": "code", "execution_count": 265, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
regular_Lnon_regular_Lleft_costproducecostsaleprofit
013206800.0120026002700.0100.0
113604400.0120026002700.0100.0
213206600.0120026002700.0100.0
314005600.0120026002700.0100.0
413405600.0120026002700.0100.0
........................
9513805400.0120026002700.0100.0
9614604400.0120026002700.0100.0
9714004000.0120026002700.0100.0
9813605800.0120026002700.0100.0
9913008400.0120026002700.0100.0
\n", "

100 rows × 7 columns

\n", "
" ], "text/plain": [ " regular_L non_regular_L left_cost produce cost sale profit\n", "0 1320 680 0.0 1200 2600 2700.0 100.0\n", "1 1360 440 0.0 1200 2600 2700.0 100.0\n", "2 1320 660 0.0 1200 2600 2700.0 100.0\n", "3 1400 560 0.0 1200 2600 2700.0 100.0\n", "4 1340 560 0.0 1200 2600 2700.0 100.0\n", ".. ... ... ... ... ... ... ...\n", "95 1380 540 0.0 1200 2600 2700.0 100.0\n", "96 1460 440 0.0 1200 2600 2700.0 100.0\n", "97 1400 400 0.0 1200 2600 2700.0 100.0\n", "98 1360 580 0.0 1200 2600 2700.0 100.0\n", "99 1300 840 0.0 1200 2600 2700.0 100.0\n", "\n", "[100 rows x 7 columns]" ] }, "execution_count": 265, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 2 times of the producing proces in 100 days.\n", "chemSim(2).chem_df(2)\n" ] }, { "cell_type": "code", "execution_count": 266, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
regular_Lnon_regular_Lleft_costproducecostsaleprofit
013007000.0180039004050.0150.0
113806400.0180039004050.0150.0
214006200.0180039004050.0150.0
313807000.0180039004050.0150.0
412806200.0180039004050.0150.0
........................
60138032035.0180039003825.0-110.0
7513404600.0180039004050.0150.0
7713604400.0180039004050.0150.0
9213404600.0180039004050.0150.0
9513404600.0180039004050.0150.0
\n", "

100 rows × 7 columns

\n", "
" ], "text/plain": [ " regular_L non_regular_L left_cost produce cost sale profit\n", "0 1300 700 0.0 1800 3900 4050.0 150.0\n", "1 1380 640 0.0 1800 3900 4050.0 150.0\n", "2 1400 620 0.0 1800 3900 4050.0 150.0\n", "3 1380 700 0.0 1800 3900 4050.0 150.0\n", "4 1280 620 0.0 1800 3900 4050.0 150.0\n", ".. ... ... ... ... ... ... ...\n", "60 1380 320 35.0 1800 3900 3825.0 -110.0\n", "75 1340 460 0.0 1800 3900 4050.0 150.0\n", "77 1360 440 0.0 1800 3900 4050.0 150.0\n", "92 1340 460 0.0 1800 3900 4050.0 150.0\n", "95 1340 460 0.0 1800 3900 4050.0 150.0\n", "\n", "[100 rows x 7 columns]" ] }, "execution_count": 266, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 3 times of the producing proces in 100 days.\n", "chemSim(3).chem_df(3)\n" ] }, { "cell_type": "code", "execution_count": 267, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
regular_Lnon_regular_Lleft_costproducecostsaleprofit
01280640168.0240052004320.0-1048.0
11380480189.0240052004185.0-1204.0
21280780119.0240052004635.0-684.0
31340460210.0240052004050.0-1360.0
41360680126.0240052004590.0-736.0
........................
951320660147.0240052004455.0-892.0
961400480182.0240052004230.0-1152.0
97142072091.0240052004815.0-476.0
981340640147.0240052004455.0-892.0
99148072070.0240052004950.0-320.0
\n", "

100 rows × 7 columns

\n", "
" ], "text/plain": [ " regular_L non_regular_L left_cost produce cost sale profit\n", "0 1280 640 168.0 2400 5200 4320.0 -1048.0\n", "1 1380 480 189.0 2400 5200 4185.0 -1204.0\n", "2 1280 780 119.0 2400 5200 4635.0 -684.0\n", "3 1340 460 210.0 2400 5200 4050.0 -1360.0\n", "4 1360 680 126.0 2400 5200 4590.0 -736.0\n", ".. ... ... ... ... ... ... ...\n", "95 1320 660 147.0 2400 5200 4455.0 -892.0\n", "96 1400 480 182.0 2400 5200 4230.0 -1152.0\n", "97 1420 720 91.0 2400 5200 4815.0 -476.0\n", "98 1340 640 147.0 2400 5200 4455.0 -892.0\n", "99 1480 720 70.0 2400 5200 4950.0 -320.0\n", "\n", "[100 rows x 7 columns]" ] }, "execution_count": 267, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 4 times of the producing proces in 100 days.\n", "chemSim(4).chem_df(4)\n" ] }, { "cell_type": "code", "execution_count": 268, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The mean proifts of each scenatio is:[[ 50]\n", " [ 100]\n", " [ 136]\n", " [-945]]\n", "\n", "So,if there are 1 times of running the process,the highest profit is $4404080440.\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA04AAAHUCAYAAAANwniNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABM+UlEQVR4nO3de3zP9f//8fvbNtvYAWOzZYxkziySKedYW4k+HaSDU6d9Ug6jhIpQS6cPlUN8HD5SdBgi8uGLDZEc5lCNECa2UGyIse35+8Nv70/vtnntrfE2u10vl/fl4vV8P5+v1+P1er/H7l6v1/NlM8YYAQAAAAAKVcbVBQAAAADAtY7gBAAAAAAWCE4AAAAAYIHgBAAAAAAWCE4AAAAAYIHgBAAAAAAWCE4AAAAAYIHgBAAAAAAWCE4AAAAAYIHgBABFMGvWLNlsNtlsNiUmJuZ73xij2rVry2azqV27dle9Pme0a9fOvi82m03e3t5q0qSJxo8fr9zc3GLd1sqVK9W8eXOVL19eNptNCxcutB/LAwcO2Pt98sknGj9+fLFuO89LL72k6tWry93dXRUqVLgi2/g7bDabnn32WVeXcU0q6LsCAK7i7uoCAKAk8fX11fTp0/OFo6SkJO3bt0++vr6uKcxJtWrV0scffyxJOnr0qKZMmaJBgwYpLS1N48aNK5ZtGGP04IMPqk6dOlq0aJHKly+v8PBwZWdna8OGDQoODrb3/eSTT/T9999r4MCBxbLtPF9++aVee+01jRgxQtHR0fL09CzW9ePKuuuuu/J9VwDAVQhOAOCE7t276+OPP9bEiRPl5+dnb58+fboiIyOVmZnpwuqKztvbWy1btrQvR0dHq27duvrggw80duxYeXh45BtjjNG5c+fk7e1dpG0cOXJEv//+u+6991517NjR4b0qVar8vR0oou+//16S1L9/fwUGBl6VbeLvO3v2rLy8vFSlSpWr9l0BACtcqgcATujRo4ckae7cufa2jIwMJSQkqG/fvgWOOX/+vMaOHau6devK09NTVapUUZ8+fXTs2DGHfp9++qk6d+6s4OBgeXt7q169enrxxRd15swZh369e/eWj4+P9u7dq5iYGPn4+Cg0NFSDBw9WVlbWZe2Xh4eHmjVrpj/++MNeV94lZFOmTFG9evXk6emp//znP5KkdevWqWPHjvL19VW5cuXUqlUrLVmyxL6+UaNGqVq1apKkoUOHymazKSwsTFL+y6/atWunJUuW6ODBgw6XEF5Kbm6u3nzzTfsxDQwMVM+ePfXLL7/Y+4SFhemll16SJAUFBclms2nUqFGXXO/mzZt1zz33qFKlSvLy8lJERIQ+++wzhz7Hjh3TM888o/r168vHx0eBgYHq0KGD1q5dm299WVlZGj16tOrVqycvLy8FBASoffv2Wr9+fb6+H330kerVq6dy5cqpSZMm+uqrry5Za95xGDt2rMLDw+Xt7a0KFSqocePGmjBhgkO/Xbt2qUePHgoKCpKnp6eqV6+unj17Onxf0tPT9fTTT6tatWoqW7asatasqVdffVXZ2dn2PgcOHJDNZtPbb7+td999VzVr1pSPj48iIyP17bff5juWDz30kMLCwuTt7a2wsDD16NFDBw8edOiX931Yvny5+vbtqypVqqhcuXLKysoq9FK9GTNmqEmTJvLy8lKlSpV07733KiUlxfJ4AcDfwRknAHCCn5+f7r//fs2YMUNPP/20pIshqkyZMurevXu++3Ryc3PVtWtXrV27Vi+88IJatWqlgwcPauTIkWrXrp02b95sP4OzZ88excTEaODAgSpfvrx27dqlcePG6bvvvtOqVasc1nvhwgXdc889evzxxzV48GCtWbNGY8aMkb+/v1555ZXL2rd9+/bJ3d1dFStWtLctXLhQa9eu1SuvvKKqVasqMDBQSUlJ6tSpkxo3bqzp06fL09NTkyZNUpcuXTR37lx1795dTzzxhJo0aaJ//OMfeu655/Twww8XepncpEmT9NRTT2nfvn1asGBBkWr95z//qalTp+rZZ5/V3XffrQMHDujll19WYmKitm7dqsqVK2vBggWaOHGipk+frmXLlsnf398e5gqyevVq3Xnnnbr11ls1ZcoU+fv7a968eerevbv++OMP9e7dW5L0+++/S5JGjhypqlWr6vTp01qwYIHatWunlStX2i/jzM7OVnR0tNauXauBAweqQ4cOys7O1rfffqvU1FS1atXKvu0lS5Zo06ZNGj16tHx8fPTmm2/q3nvv1e7du1WrVq1Ca37zzTc1atQovfTSS2rTpo0uXLigXbt26eTJk/Y+27dv1+23367KlStr9OjRuummm5SWlqZFixbp/Pnz8vT0VHp6ulq0aKEyZcrolVde0Y033qgNGzZo7NixOnDg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22+/KScnR82bN8/3yvtlPO+Xxr9OoPDhhx9euZ24DOXLl9ett96q+fPnO5w1yM3N1Zw5c1StWjXVqVPH6fUW5exKng4dOki6GGD+bNOmTUpJSck39XlRhIeH66abbtL27dsL/JyaN29uD7k2my3f57Rjxw5t2LDBoS06Olrnzp3TrFmznK7nclSoUEH333+/+vXrp99//10HDhyQt7e32rZtq88//zzfWaM/u/vuu/X999/rxhtvLHDfnQ1ONptNxph8x+nf//63cnJyLmv/JCkyMlLe3t75PvtffvlFq1atuqzPHgCKqlSfcbqUffv2ae7cufrll1/s/2AMGTJEy5Yt08yZM/X6668rKipKgwYNUu/evdW+fXvt3bvXPsNQWlqafepdANenN954w7LPQw89pI8//lgxMTEaMGCAWrRoIQ8PD/3yyy9avXq1unbtqnvvvVetWrVSxYoVFRsbq5EjR8rDw0Mff/yxtm/ffhX2xDnx8fHq1KmT2rdvryFDhqhs2bKaNGmSvv/+e82dO/eyzrY3atRI8+fP1+TJk9WsWTOVKVOm0DNi4eHheuqpp/T++++rTJkyio6Ots+qFxoaqkGDBl3Wfn344YeKjo5WVFSUevfurRtuuEG///67UlJStHXrVn3++eeSLoaMMWPGaOTIkWrbtq12796t0aNHq2bNmg5Td/fo0UMzZ85UbGysdu/erfbt2ys3N1cbN25UvXr19NBDD11WnX/WpUsXNWzYUM2bN1eVKlV08OBBjR8/XjVq1LDPLvfuu+/q9ttv16233qoXX3xRtWvX1q+//qpFixbpww8/lK+vr0aPHq0VK1aoVatW6t+/v8LDw3Xu3DkdOHBAS5cu1ZQpUywv9/szPz8/tWnTRm+99ZYqV66ssLAwJSUlafr06apQocJl72+FChX08ssva/jw4erZs6d69Oih3377Ta+++qq8vLw0cuTIy143AFghOBVi69atMsbk+5/TrKws+6UCTz75pPbt26e7775bFy5ckJ+fnwYMGKBRo0Y53DQLoPRyc3PTokWLNGHCBH300UeKj4+Xu7u7qlWrprZt26pRo0aSLl6CtGTJEg0ePFiPPvqoypcvr65du+rTTz/VzTff7OK9cNS2bVutWrVKI0eOVO/evZWbm6smTZpo0aJFuvvuuy9rnQMGDNAPP/yg4cOHKyMjQ8YY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/b2yZcsqLCxMkZGRV6RIAAAAAHClIgenXr16SZJq1qypVq1aycPD44oVBQAAAADXkiIFp8zMTPvNUhERETp79qzOnj1bYF8mXAAAAABwvSlScKpYsaJ9Jr0KFSoUODlE3qQR1/qsegAAAADgrCIFp1WrVtlnzFu9enWxbTw+Pl7z58/Xrl275O3trVatWmncuHEKDw8vdExiYqLat2+frz0lJUV169YtttoAAAAAIE+RgtOECRMUEREhPz8/HTx4UN27d5enp+ff3nhSUpL69eunW265RdnZ2RoxYoQ6d+6sH3/8UeXLl7/k2N27dztcFlilSpW/XQ8AAAAAFKRID8AtW7asDh48qODg4EIfgFscjh07psDAQCUlJalNmzYF9sk743TixAlVqFDB6W3wAFwAAAAAknPZoEhnnOrWrathw4apffv2Msbos88+K3TFPXv2dL7i/y8jI0OSivQg3YiICJ07d07169fXSy+9VODle5KUlZWlrKws+3JmZuZl1wcAAACgdCrSGaf169crLi5O+/bt0++//y5fX98CJ4iw2Wz6/fffL6sQY4y6du2qEydOaO3atYX22717t9asWaNmzZopKytLH330kaZMmaLExMQCz1KNGjVKr776ar52zjgBAAAApZszZ5yKFJz+rEyZMkpPTy/2S/X69eunJUuWaN26dapWrZpTY7t06SKbzaZFixble6+gM06hoaEEJwAAAKCUcyY4lXF25fv37y/2iRiee+45LVq0SKtXr3Y6NElSy5YttWfPngLf8/T0lJ+fn8MLAAAAAJxRpHuc/qxGjRo6efKkpk+frpSUFNlsNtWrV0+PP/64/P39nVqXMUbPPfecFixYoMTERNWsWdPZciRJycnJCg4OvqyxAAAAAGDF6eC0efNmRUVFydvbWy1atJAxRv/617/0+uuva/ny5br55puLvK5+/frpk08+0ZdffilfX1+lp6dLkvz9/eXt7S1JGjZsmA4fPqzZs2dLksaPH6+wsDA1aNBA58+f15w5c5SQkKCEhARndwUAAAAAisTp4DRo0CDdc889mjZtmtzdLw7Pzs7WE088oYEDB2rNmjVFXtfkyZMlSe3atXNonzlzpnr37i1JSktLU2pqqv298+fPa8iQITp8+LC8vb3VoEEDLVmyRDExMc7uCgAAAAAUidOTQ3h7eys5OVl169Z1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4GD7n8uXL2+5zj+vN48x5opN6ODs8cjNzZWbm5u2bNkiNzc3h355YeuJJ55QVFSUlixZouXLlys+Pl7vvPOOnnvuuXzb/+tn9uf24tpnq/2RpCVLluiGG25w6Ofp6en0tv5ac0Gf+aU+34KOx1/75wX/P/f963fd29vbiaovutRxKujzKOyzK4q/e5ys9i83N1dPP/20+vfvn++96tWrq2zZstq6dasSExO1fPlyvfLKKxo1apQ2bdqkChUqaMWKFVq/fr2WL1+u999/XyNGjNDGjRtVs2ZNZ3cVQAnEGScA14U33nhDixcv1vr16x3aq1SpovT0dIdf5orz2Uvffvut/c/Z2dnasmWL/azSzTffrB9++EFhYWGqXbu2w6uoYUmS/Pz8FBISonXr1jm0r1+/XvXq1XOq3rJlyzpM6FBcIiIilJOTo6NHj+bb16pVq9r7hYaGKjY2VvPnz9fgwYM1bdq0AtdXv359ZWdna+PGjfa23377TT/99JPT++zh4eH0PtevX1+enp5KTU3Ntz+hoaGXHPvn70Tect53ojD16tW75Odbv359paam6siRI/b3N2zY4NC/SpUqkqS0tDR721+/640bNy50qvrLUbduXe3YsUNZWVn2ts2bNxdp7JU4To0bN9Yvv/yin376qcDxeT+Tf/1Ma9eurbJly0q6eOb4jjvu0JtvvqkdO3bowIEDWrVqlaSLoe22227Tq6++quTkZJUtW1YLFiwo0v4CKPk44wTgutCoUSM98sgj+WbmateunY4dO6Y333xT999/v5YtW6avv/5afn5+xbLdiRMn6qabblK9evX0r3/9SydOnFDfvn0lSf369dO0adPUo0cPPf/886pcubL27t2refPmadq0afnOzFzK888/r5EjR+rGG29U06ZNNXPmTG3btk0ff/yxU/WGhYVp48aNOnDggHx8fFSpUiWnxhemTp06euSRR9SzZ0+98847ioiI0PHjx7Vq1So1atRIMTExGjhwoKKjo1WnTh2dOHFCq1atKjQE3XTTTeratauefPJJffjhh/L19dWLL76oG264QV27dnWqtrCwMK1cuVK33XabPD09VbFiRcsxvr6+GjJkiAYNGqTc3FzdfvvtyszM1Pr16+Xj46NevXoVOvabb77Rm2++qW7dumnFihX6/PPPtWTJkktu7/nnn9eDDz6om2++WR07dtTixYs1f/58/d///Z+kizNIhoeH249vZmamRowY4bCOvFA3atQojR07Vnv27NE777zj0GfYsGFq1KiRnnnmGcXGxqps2bJavXq1HnjgAVWuXNnyuPzVww8/rBEjRuipp57Siy++qNTUVL399tuS8p8Z+qsrcZzatm2rNm3a6L777tO7776r2rVra9euXbLZbLrzzjs1dOhQtWzZUv369dOTTz6p8uXLKyUlRStWrND777+vr776Sj///LPatGmjihUraunSpcrNzVV4eLg2btyolStXqnPnzgoMDNTGjRt17Ngxp4M8gJKLM04ArhtjxozJd5lQvXr1NGnSJE2cOFFNmjTRd999pyFDhhTbNt944w2NGzdOTZo00dq1a/Xll1/afwENCQnRN998o5ycHEVFRalhw4YaMGCA/P39He6nKor+/ftr8ODBGjx4sBo1aqRly5Zp0aJFuummm5xaz5AhQ+Tm5qb69eurSpUqSk1NdWr8pcycOVM9e/bU4MGDFR4ernvuuUcbN260n6HJyclRv379VK9ePd15550KDw/XpEmTLrm+Zs2a6e6771ZkZKSMMVq6dGm+S8esvPPOO1qxYoVCQ0MVERFR5HFjxozRK6+8ovj4eNWrV09RUVFavHix5WVZgwcP1pYtWxQREaExY8bonXfeUVRU1CXHdOvWTRMmTNBbb72lBg0a6MMPP9TMmTPVrl07SRcvw1uwYIGysrLUokULPfHEE3rttdcc1uHh4aG5c+dq165datKkicaNG2efwjtPnTp1tHz5cm3fvl0tWrRQZGSkvvzyS7m7X97/o/r5+Wnx4sXatm2bmjZtqhEjRuiVV16RJIf7ngpyJY6TJCUkJOiWW25Rjx49VL9+fb3wwgv2M46NGzdWUlKS9uzZo9atWysiIkIvv/yy/dLZChUqaP78+erQoYPq1aunKVOmaO7cuWrQoIH8/Py0Zs0axcTEqE6dOnrppZf0zjvvKDo6+rKOHYCSx2b+zsXIAADALiwsTAMHDnR4FlJp8/HHH6tPnz7KyMgo9J4jjhOAkohL9QAAwGWbPXu2atWqpRtuuEHbt2/X0KFD9eCDD17WRBQAcC0jOAEAgMuWnp6uV155Renp6QoODtYDDzyQ7zJCALgecKkeAAAAAFhgcggAAAAAsEBwAgAAAAALBCcAAAAAsEBwAgAAAAALBCcAAAAAsEBwAgAAAAALBCcAAAAAsEBwAgAAAAAL/w+ANZmM/05ZcgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "result_Mean_profits = np.empty(shape=(5, 1), dtype=int)\n", "\n", "_, ax = plt.subplots(figsize=(10, 5))\n", "\n", "for i in range(1, 5):\n", " result_Mean_profits[i] = np.mean(chemSim(i).chem_df(i)['profit'])\n", "\n", " ax.bar(i, result_Mean_profits[i], color='blue', width=0.3)\n", " ax.set(ylim=(np.min(result_Mean_profits) - 100,\n", " np.max(result_Mean_profits) + 100),\n", " xticks=np.arange(1, 5),\n", " xticklabels=['1', '2', '3', '4'],\n", " title='Mean Profit of each scenario',\n", " xlabel='Number of times of the producing process',\n", " ylabel='Mean Profit')\n", "\n", "print(f\"The mean proifts of each scenatio is:{result_Mean_profits[1:]}\")\n", "\n", "print(\n", " f\"\\nSo,if there are {np.argmax(result_Mean_profits) + 1} times of running the process,the highest profit is ${np.max(result_Mean_profits)}.\"\n", ")\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Part3-Problem 2\n", "\n", "The management of a hotel is considering renting a portable filtration unit to process the water to make it drinkable. There are three possible filtration units:\n", "\n", "\n", "\n", "| | Unit1 | Unit2 | Unit3 |\n", "| :----------------: | :-----: | :------: | :------: |\n", "| Capacity (Gallons) | 800 | 900 | 1000 |\n", "| Cost | $\\$800$ | $\\$1000$ | $\\$1300$ |\n", "\n", "They are also considering not renting a filtration unit. If they don’t rent a unit, or if the unit’s capacity turns out to be insufficient to meet the hotel guests’ demand for water, the hotel will have to supply bottled water to every occupied room.Providing bottled water will cost the hotel a flat fee of $450, plus $5 per occupied room.The hotel has 250 rooms.\n", "\n", "At present, they have 200 room reservations they consider “firm”, with a negligible chance of cancellation.\n", "\n", "They have another 35 reservations they consider “doubtful”, each with an independent 65% chance of resulting in an occupied room.\n", "\n", "They also expect to get some “last minute” requests for rooms, which they estimate to be Poisson with a mean of 30.\n", "\n", "Occupied rooms consume random amounts of water independently from one another.\n", "\n", "Each occupied room consumes the amount of water that is distributed according to the normal distribution with an average of 4 gallons of water and a standard deviation of 3.1.\n", "\n", "Find an optimal plan for the management and also the probability of not having enough filtered water to meet this optimal demand.\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "#### Analysis\n", "\n", "As the bottle water is the suppliment of the hotel filter-drinking system,there are four scenarios:\n", "\n", "- Unit1, Unit2, Unit3 and All bottle water with no unit.\n", "\n", "Thus we can define the scenarios(scenario,capacity of water, cost) as below:\n" ] }, { "cell_type": "code", "execution_count": 269, "metadata": {}, "outputs": [], "source": [ "# define the scenario of bottle water only later since it meet all the demand of water consumption in the hotel.\n", "vol = []\n", "\n", "scen_param = {1: (800, 800), 2: (900, 1000), 3: (1000, 1300), 4: (vol, 450)}\n" ] }, { "cell_type": "code", "execution_count": 270, "metadata": {}, "outputs": [], "source": [ "# we would like to simulate each condition in 1000 days\n", "num_days = 1000\n", "\n", "total_rooms = 250\n", "firm_rooms = 200\n", "\n", "binom_rooms = binom.rvs(35, 0.65, size=num_days)\n", "lastMin_rooms = np.minimum(50 - binom_rooms, poisson.rvs(30, size=num_days))\n", "\n", "day_rooms = 200 + binom_rooms + lastMin_rooms\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### halfnormal????\n" ] }, { "cell_type": "code", "execution_count": 271, "metadata": {}, "outputs": [], "source": [ "room_consumption = []\n", "water_consumption = []\n", "\n", "for i in range(num_days):\n", " room_consumption.append(halfnorm.rvs(\n", " loc=4, scale=3.1, size=day_rooms[i]).astype(int))\n", " water_consumption.append(room_consumption[i].sum())\n" ] }, { "cell_type": "code", "execution_count": 272, "metadata": {}, "outputs": [], "source": [ "# room_consumption = (halfnorm.rvs(loc=4,scale=3.1,size=day_room).astype(int) for day_room in day_rooms)\n", "# water_consumption = (room_consump.sum() for room_consump in room_consumption)\n", "# ## XB 0.2s\n" ] }, { "cell_type": "code", "execution_count": 273, "metadata": {}, "outputs": [], "source": [ "water_consumption_df = pd.DataFrame(\n", " {'room_booked': day_rooms, 'water_consumption': water_consumption})\n", "\n", "water_consumption_df['shortage_Unit1_800'] = water_consumption_df['water_consumption'] - 800\n", "water_consumption_df['shortage_Unit1_800_ratio'] = round(\n", " water_consumption_df['shortage_Unit1_800'] / water_consumption_df['water_consumption'], 2)\n", "\n", "water_consumption_df['shortage_Unit2_900'] = water_consumption_df['water_consumption'] - 900\n", "\n", "water_consumption_df['shortage_Unit2_900_ratio'] = round(\n", " water_consumption_df['shortage_Unit2_900'] / water_consumption_df['water_consumption'], 2)\n", "\n", "water_consumption_df['shortage_Unit3_1000'] = water_consumption_df['water_consumption'] - 1000\n", "\n", "water_consumption_df['shortage_Unit3_1000_ratio'] = round(\n", " water_consumption_df['shortage_Unit3_1000'] / water_consumption_df['water_consumption'], 2)\n", "\n", "water_consumption_df['bottle_water_fee'] = water_consumption_df['room_booked'] * 5\n" ] }, { "cell_type": "code", "execution_count": 274, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
room_bookedwater_consumptionshortage_Unit1_800shortage_Unit1_800_ratioshortage_Unit2_900shortage_Unit2_900_ratioshortage_Unit3_1000shortage_Unit3_1000_ratiobottle_water_fee
025014646640.455640.394640.321250
124514776770.465770.394770.321225
224414676670.455670.394670.321220
325014996990.475990.404990.331250
425014936930.465930.404930.331250
..............................
99524514846840.465840.394840.331225
99625014526520.455520.384520.311250
99725015137130.476130.415130.341250
99824914866860.465860.394860.331245
99925015397390.486390.425390.351250
\n", "

1000 rows × 9 columns

\n", "
" ], "text/plain": [ " room_booked water_consumption shortage_Unit1_800 \\\n", "0 250 1464 664 \n", "1 245 1477 677 \n", "2 244 1467 667 \n", "3 250 1499 699 \n", "4 250 1493 693 \n", ".. ... ... ... \n", "995 245 1484 684 \n", "996 250 1452 652 \n", "997 250 1513 713 \n", "998 249 1486 686 \n", "999 250 1539 739 \n", "\n", " shortage_Unit1_800_ratio shortage_Unit2_900 shortage_Unit2_900_ratio \\\n", "0 0.45 564 0.39 \n", "1 0.46 577 0.39 \n", "2 0.45 567 0.39 \n", "3 0.47 599 0.40 \n", "4 0.46 593 0.40 \n", ".. ... ... ... \n", "995 0.46 584 0.39 \n", "996 0.45 552 0.38 \n", "997 0.47 613 0.41 \n", "998 0.46 586 0.39 \n", "999 0.48 639 0.42 \n", "\n", " shortage_Unit3_1000 shortage_Unit3_1000_ratio bottle_water_fee \n", "0 464 0.32 1250 \n", "1 477 0.32 1225 \n", "2 467 0.32 1220 \n", "3 499 0.33 1250 \n", "4 493 0.33 1250 \n", ".. ... ... ... \n", "995 484 0.33 1225 \n", "996 452 0.31 1250 \n", "997 513 0.34 1250 \n", "998 486 0.33 1245 \n", "999 539 0.35 1250 \n", "\n", "[1000 rows x 9 columns]" ] }, "execution_count": 274, "metadata": {}, "output_type": "execute_result" } ], "source": [ "water_consumption_df\n" ] }, { "cell_type": "code", "execution_count": 275, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
room_bookedwater_consumptionshortage_Unit1_800shortage_Unit1_800_ratioshortage_Unit2_900shortage_Unit2_900_ratioshortage_Unit3_1000shortage_Unit3_1000_ratiobottle_water_fee
count1000.0000001000.0000001000.0000001000.0000001000.0000001000.0000001000.0000001000.0000001000.000000
mean248.8400001491.319000691.3190000.463410591.3190000.396370491.3190000.3290601244.200000
std2.37782531.95716731.9571670.01189231.9571670.01327831.9571670.01461311.889127
min233.0000001396.000000596.0000000.430000496.0000000.360000396.0000000.2800001165.000000
25%249.0000001470.000000670.0000000.460000570.0000000.390000470.0000000.3200001245.000000
50%250.0000001492.000000692.0000000.460000592.0000000.400000492.0000000.3300001250.000000
75%250.0000001513.000000713.0000000.470000613.0000000.410000513.0000000.3400001250.000000
max250.0000001597.000000797.0000000.500000697.0000000.440000597.0000000.3700001250.000000
\n", "
" ], "text/plain": [ " room_booked water_consumption shortage_Unit1_800 \\\n", "count 1000.000000 1000.000000 1000.000000 \n", "mean 248.840000 1491.319000 691.319000 \n", "std 2.377825 31.957167 31.957167 \n", "min 233.000000 1396.000000 596.000000 \n", "25% 249.000000 1470.000000 670.000000 \n", "50% 250.000000 1492.000000 692.000000 \n", "75% 250.000000 1513.000000 713.000000 \n", "max 250.000000 1597.000000 797.000000 \n", "\n", " shortage_Unit1_800_ratio shortage_Unit2_900 shortage_Unit2_900_ratio \\\n", "count 1000.000000 1000.000000 1000.000000 \n", "mean 0.463410 591.319000 0.396370 \n", "std 0.011892 31.957167 0.013278 \n", "min 0.430000 496.000000 0.360000 \n", "25% 0.460000 570.000000 0.390000 \n", "50% 0.460000 592.000000 0.400000 \n", "75% 0.470000 613.000000 0.410000 \n", "max 0.500000 697.000000 0.440000 \n", "\n", " shortage_Unit3_1000 shortage_Unit3_1000_ratio bottle_water_fee \n", "count 1000.000000 1000.000000 1000.000000 \n", "mean 491.319000 0.329060 1244.200000 \n", "std 31.957167 0.014613 11.889127 \n", "min 396.000000 0.280000 1165.000000 \n", "25% 470.000000 0.320000 1245.000000 \n", "50% 492.000000 0.330000 1250.000000 \n", "75% 513.000000 0.340000 1250.000000 \n", "max 597.000000 0.370000 1250.000000 " ] }, "execution_count": 275, "metadata": {}, "output_type": "execute_result" } ], "source": [ "water_consumption_df.describe()\n" ] }, { "cell_type": "code", "execution_count": 276, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1694.2" ] }, "execution_count": 276, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bottle_water_mean = water_consumption_df['bottle_water_fee'].mean() + 450\n", "bottle_water_mean\n" ] }, { "cell_type": "code", "execution_count": 277, "metadata": {}, "outputs": [], "source": [ "# cost_ls = []\n", "\n", "# for scen in range(1,5):\n" ] }, { "cell_type": "code", "execution_count": 278, "metadata": {}, "outputs": [], "source": [ "uinit_1_cost = scen_param[1][1] + bottle_water_mean\n", "uinit_2_cost = scen_param[2][1] + bottle_water_mean\n", "uinit_3_cost = scen_param[3][1] + bottle_water_mean\n", "all_water_cost = bottle_water_mean\n" ] }, { "cell_type": "code", "execution_count": 279, "metadata": {}, "outputs": [], "source": [ "cost_ls = [uinit_1_cost, uinit_2_cost, uinit_3_cost, all_water_cost]\n" ] }, { "cell_type": "code", "execution_count": 280, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[2494.2, 2694.2, 2994.2, 1694.2]" ] }, "execution_count": 280, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cost_ls\n" ] }, { "cell_type": "code", "execution_count": 281, "metadata": {}, "outputs": [ { "data": { "image/png": "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UVGFD854/fXXrePnq3fv3vL19dV3332ntm3bnnE71QdjTIU3Wr366qsqKyvz2Ne3b1+tWrWqUk9zqArXXnutRo8erZ49e1pf244dO8rpdGr+/PkyxpzxvNjYWDVt2lRbtmw5a9+Dg4PPqy2nAu3pX6cFCxZcQM/+n1Pf29PH3Xvvvadjx45d0PcewKXHDDCAGisuLk7z5s3TqFGj1KZNG40cOVI33HCDSktL9fXXX+uVV15Ry5Ytdccddyg2NlYjRozQX//6V9WqVUt9+/a1ngIRHR2tP/zhD5KkFStW6G9/+5sGDhyoxo0byxij999/X/n5+erZs6d171atWik1NVUfffSRIiMjFRwcfNZZx6FDh+rll19WUlKS9u3bp1atWmnNmjWaMWOG+vXrpx49epx33xs2bKjp06friSee0Pfff68+ffooNDRUhw8f1oYNGxQUFKSnn35aISEh6ty5s/7yl7+ofv36atiwodLS0rRw4UJdddVVHtecPn26Pv30U3Xu3FlTpkxRq1atlJ+fr5SUFI0fP17XX3/9ebfzl9xut7p27aohQ4bo+uuvV3BwsDZu3KiUlBRrJrdu3bp64YUX9Lvf/U49evTQ8OHDFRERoT179mjLli2aO3eupJ+Dad++fdW7d28NGzZMV199tY4eParMzExt3rxZ77zzznm1rWPHjgoNDdUjjzyiqVOnys/PT0uWLNGWLVsuqs89e/ZU7969NWnSJBUUFOi2226zngJx8803KzEx8aKuD+AS8eIb8ACgUjIyMkxSUpK59tprjb+/vwkKCjI333yzeeqpp0xOTo5VV1ZWZp5//nnTrFkz4+fnZ+rXr2/uv/9+c+DAAatm586d5t577zXXXXedCQwMNE6n09x6661m8eLFFe552223mTp16hhJJj4+/pxtzM3NNY888oiJjIw0vr6+JiYmxkyePNmcOHHCo66yT4E4Zfny5aZr164mJCTEBAQEmJiYGHPXXXeZzz//3Ko5ePCgGTRokAkNDTXBwcGmT58+Zvv27SYmJqbCkywOHDhgHnzwQeNyuYyfn5+Jiooyd999tzl8+LAx5v89BeKdd97xOG/v3r1Gklm0aNFZ23rixAnzyCOPmNatW5uQkBATGBhoYmNjzdSpU82xY8c8aj/55BMTHx9vgoKCTJ06dUyLFi3M888/71GzZcsWc/fdd5vw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XwMGDFBQUJCeffbZs7a7JiIAo9p89913Wr58uVasWKEVK1YoLS1Nzz333Blr33//fV1zzTXWB5dkZWVVc2tR012q8eR2uys104crz6UYU3v27FFKSori4+MvZdNtYenSpYqNjVVsbKzuv/9+LVq0SFXxUQZ//OMfNWHCBH399dfq2LGj+vfvr9zcXEnSDz/8oH79+qldu3basmWL5s2bp4ULF1ph76WXXlJcXJyGDx9ujYPo6GjrL5S7du1SVlaWXnrppTPe+4EHHtB//vMfJScna+vWrfqf//kf9enTR7t37z5jfZcuXbR69WqVl5dL+jmc169fX2lpaZKk7Oxsffvtt9Z4KywsVFJSklavXq1169apadOm6tevn/Ufu40bN0qSFi1apKysLOv1Z599pvvvv19jx47Vjh07tGDBAi1evFh//vOfPdozdepUDRgwQNu2bdODDz54Yd8ALyEAo9qUl5dr8eLFatmypTp16qTExER98cUXZ6wNCwuTj4+PgoOD5XK5mO1FBZdiPL377rvauHGjHnjggUvZdNRQVTmmTs0oNm3aVJ06ddL06dOrowtXtIULF+r++++XJPXp00dFRUVn/f6cj9GjR2vQoEFq3ry55s2bJ6fTqYULF0qS/va3vyk6Olpz587V9ddfr4EDB+rpp5/WCy+8oPLycjmdTvn7+6tOnTrWOPDx8bH+Ex0eHi6XyyWn01nhvt99953++c9/6p133lGnTp103XXXaeLEifrNb36jRYsWnbGtnTt3VmFhob7++msZY7R69WpNmDDBmjVetWqVIiIidP3110uSunXrpvvvv1/NmzdX8+bNtWDBAv30009WYG7QoIEk6aqrrpLL5bJe//nPf9bjjz+upKQkNW7cWD179tQzzzxjzSyfMmTIED344INq3LjxZffJugRgVJuGDRsqODjYeh0ZGamcnBwvtgiXs6oeT6mpqRo2bJj+/ve/64YbbqiKJuIyU5VjaunSpdq8ebPeeustffzxx/rf//3fqmqmLe3atUsbNmzQPffcI0ny9fXV4MGD9dprr130tePi4qx/+/r6qm3btsrMzJQkZWZmKi4uzuPNkrfddpuKiop08ODBi7rv5s2bZYxRs2bNVLduXWtLS0vTd999d8ZznE6nbrrpJqWmpmrbtm2qVauWHn74YW3ZskWFhYVKTU31+GtDTk6OHnnkETVr1kxOp1NOp1NFRUXav3//Odu2adMmTZ8+3aNdp2a5f/rpJ6uubdu2F/U18CbeBIeLFhISIrfbXWF/fn6+QkJCrNenL453OBzWn3GAU7wxntLS0nTHHXfoxRdf1NChQy/oGqi5vDGmoqOjJUktWrRQWVmZRowYoQkTJsjHx+eCrmd3Cxcu1MmTJ3X11Vdb+4wx8vPzU15enkJDQ6v0fqcCrzGmwpNCTi27OJ8niJxJeXm5fHx8tGnTpgrjom7dumc9r0uXLkpNTZW/v7/i4+MVGhqqG264Qf/5z3+Umprq8USKYcOG6ciRI5ozZ45iYmIUEBCguLg4lZSU/Grbnn76ad15550VjtWuXdv6d1BQUCV7W/MQgHHRrr/+en366acV9m/cuFGxsbEXfF1/f3+VlZVdTNNwGaru8ZSamqqEhAQ9//zzGjFixAVfHzWXt39HGWNUWlpaJetV7ejkyZN6/fXX9cILL6hXr14exwYNGqQlS5Zo9OjRF3z9devWqXPnzta9Nm3aZF2vRYsWeu+99zyC8Nq1axUcHGyF8TONA39/f0k65/i4+eabVVZWppycHHXq1KnS7e3SpYsWLlwoX19f9ejRQ5IUHx+v5ORkj/W/krR69Wr97W9/U79+/SRJBw4c0I8//uhxPT8/vwrtvOWWW7Rr1y41adKk0u263LAEAhdt1KhR+u677/Too49qy5Yt+vbbb/Xyyy9r4cKF+uMf/3jB123YsKH+/e9/64cffvD4gd2xY4cyMjJ09OhRud1uZWRkVOuDzHFpVed4Sk1N1e23366xY8dq0KBBys7OVnZ2to4ePVpV3UENUJ1jasmSJXr77beVmZmp77//Xu+8844mT56swYMHy9eXOacLsWLFCuXl5emhhx5Sy5YtPba77rrLWq97oV5++WUtW7ZMO3fu1KOPPqq8vDzrDV2jRo3SgQMHNGbMGO3cuVMffPCBpk6dqvHjx6tWrZ8jVMOGDbV+/Xrt27dPP/74o8rLyxUTEyOHw6EVK1boyJEjKioqqnDfZs2a6b777tPQoUP1/vvva+/evdq4caOef/55ffLJJ2dt76l1wB999JG6dOki6edQ/Oabb6pBgwZq0aKFVdukSRO98cYbyszM1Pr163XfffcpMDDQ43oNGzbUF198oezsbOXl5UmSnnrqKb3++uuaNm2avvnmG2VmZmrp0qX605/+dFFf6xrFAFXgq6++Mr179zbh4eEmJCTEtG3b1vzzn/+0jk+dOtXceOONHufMnj3bxMTEWK/j4+PN73//e+t1enq6ad26tQkICDC/HKoxMTFGUoUNV47qGk9JSUlnHEvx8fGXsHfwhuoaU8nJyeaWW24xdevWNUFBQaZFixZmxowZ5vjx45eye1e0hIQE069fvzMe27Rpk5FkNm3aZFatWmUkmby8PGOMMYsWLTJOp/Os1927d6+RZN566y3Tvn174+/vb5o3b26++OILj7rU1FTTrl074+/vb1wul5k0aZIpLS21ju/atct06NDBBAYGGklm7969xhhjpk+fblwul3E4HCYpKckYU3EMlZSUmKeeeso0bNjQ+Pn5GZfLZX7729+arVu3nvNr0qZNG9OgQQNTXl5ujDEmNzfXOBwOc9ddd3nUbd682bRt29YEBASYpk2bmnfeecfExMSY2bNnWzUffvihadKkifH19fUY7ykpKaZjx44mMDDQhISEmFtvvdW88sor1nFJZtmyZedsZ03mMIa/yQAAAMA+WAIBAAAAWyEAAwAAwFYIwAAAALAVAjAAAABshQAMAAAAWyEAAwAAwFYIwAAAALAVAjAAAABshQAMALhoXbp00bhx47zdDACoFAIwANQQOTk5evjhh3XttdcqICBALpdLvXv3Vnp6ureb9qvef/99PfPMM95uBgBUiq+3GwAA+NmgQYNUWlqqf/zjH2rcuLEOHz6sL774QkePHvV2086qtLRUfn5+CgsL83ZTAKDSmAEGgBogPz9fa9as0fPPP6+uXbsqJiZGt956qyZPnqzbb7/dqhkxYoQiIiJUu3ZttWzZUitWrLCusXbtWnXu3FmBgYGKjo7W2LFjdezYMet4w4YNNWPGDD344IMKDg7Wtddeq1deecWjHZMmTVKzZs1Up04dNW7cWE8++aRKS0ut49OmTdNNN92k1157TY0bN1ZAQICMMRWWQOTl5Wno0KEKDQ1VnTp11LdvX+3evfsSffUA4PwQgAGgBqhbt67q1q2r5cuXq7i4uMLx8vJy9e3bV2vXrtWbb76pHTt26LnnnpOPj48kadu2berdu7fuvPNObd26VUuXLtWaNWs0evRoj+u88MILatu2rb7++muNGjVKI0eO1M6dO63jwcHBWrx4sXbs2KGXXnpJf//73zV79myPa+zZs0dvv/223nvvPWVkZJyxP8OGDdNXX32lDz/8UOnp6TLGqF+/fh5hGgC8xgAAaoR3333XhIaGmtq1a5uOHTuayZMnmy1bthhjjPnss89MrVq1zK5du854bmJiohkxYoTHvtWrV5tatWqZ48ePG2OMiYmJMffff791vLy83ISHh5t58+adtU2zZs0ybdq0sV5PnTrV+Pn5mZycHI+6+Ph48/vf/94YY8y3335rJJn//Oc/1vEff/zRBAYGmrfffrsSXwkAuLRYAwwANcSgQYN0++23a/Xq1UpPT1dKSopmzZqlV199VTk5ObrmmmvUrFmzM567adMm7dmzR0uWLLH2GWNUXl6uvXv3qnnz5pKk1q1bW8cdDodcLpdycnKsfe+++67mzJmjPXv2qKioSCdPnlRISIjHvWJiYtSgQYOz9iMzM1O+vr5q3769ta9evXqKjY1VZmbm+X1RAOASYAkEANQgtWvXVs+ePfXUU09p7dq1GjZsmKZOnarAwMBznldeXq6HH35YGRkZ1rZlyxbt3r1b1113nVXn5+fncZ7D4VB5ebkkad26dbrnnnvUt29frVixQl9//bWeeOIJlZSUeJwTFBR0zrYYY8663+FwnPNcAKgOzAADQA3WokULLV++XK1bt9bBgwf17bffnnEW+JZbbtE333yjJk2aXPC9/vOf/ygmJkZPPPGEte+///3vBbX55MmTWr9+vTp27ChJys3N1bfffmvNRAOANzEDDAA1QG5urrp166Y333xTW7du1d69e/XOO+9o1qxZGjBggOLj49W5c2cNGjRIK1eu1N69e/Xpp58qJSVF0s9Pb0hPT9ejjz6qjIwM7d69Wx9++KHGjBlT6TY0adJE+/fvV3Jysr777jv93//9n5YtW3befWnatKkGDBig4cOHa82aNdqyZYvuv/9+XX311RowYMB5Xw8AqhoBGABqgLp166p9+/aaPXu2OnfurJYtW+rJJ5/U8OHDNXfuXEnSe++9p3bt2unee+9VixYt9Nhjj6msrEzSz2t709LStHv3bnXq1Ek333yznnzySUVGRla6DQMGDNAf/vAHjR49WjfddJPWrl2rJ5988oL6s2jRIrVp00YJCQmKi4uTMUaffPJJhSUYAOANDnO2xVoAAADAFYgZYAAAANgKARgAAAC2QgAGAACArRCAAQAAYCsEYAAAANgKARgAAAC2QgAGAACArRCAAQAAYCsEYAAAANgKARgAAAC2QgAGAACArfx/vIvP9f4jwIUAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "labels_4 = ['Unit1', 'Unit2', 'Unit3', 'All bottle water']\n", "\n", "_, ax = plt.subplots(figsize=(8, 6))\n", "\n", "ax.bar(range(4), cost_ls, color='blue')\n", "ax.set(xticks=np.arange(4),\n", " xticklabels=labels_4,\n", " xlabel='Scenario',\n", " ylabel='Cost',\n", " title='Cost of each scenario')\n", "\n", "plt.show()\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 282, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The lowest cost of each scenario is $1694.2,which is the \"All bottle water\" scenario is prefered.\n" ] } ], "source": [ "print(\n", " f\"The lowest cost of each scenario is ${np.min(cost_ls)},which is the \\\"{labels_4[np.argmin(cost_ls)]}\\\" scenario is prefered.\"\n", ")\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "p39", "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.0" }, "vscode": { "interpreter": { "hash": "c3a1109010e257dd9f1e593983c951231fd94a0c98fc2b081b8760e1222f1725" } } }, "nbformat": 4, "nbformat_minor": 4 }