{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "dOqpj0u1RYmQ"
},
"source": [
"```{index} single: AMPL; sets\n",
"```\n",
"```{index} single: AMPL; parameters\n",
"```\n",
"```{index} single: application; production planning\n",
"```\n",
"```{index} pandas dataframe\n",
"```\n",
"\n",
"# Extra material: Multi-product facility production"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"tags": [],
"id": "GFU5bbLJRYmb",
"outputId": "f0a123f8-f94d-4cca-d53e-f5a5c73c0c12",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Using default Community Edition License for Colab. Get yours at: https://ampl.com/ce\n",
"Licensed to AMPL Community Edition License for the AMPL Model Colaboratory (https://colab.ampl.com).\n"
]
}
],
"source": [
"# install dependencies and select solver\n",
"%pip install -q amplpy matplotlib\n",
"\n",
"SOLVER = \"highs\"\n",
"\n",
"from amplpy import AMPL, ampl_notebook\n",
"\n",
"ampl = ampl_notebook(\n",
" modules=[\"highs\"], # modules to install\n",
" license_uuid=\"default\", # license to use\n",
") # instantiate AMPL object and register magics"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "m1Ey4-eFRYmf"
},
"source": [
"## Maximizing the profit in the worst case for a multi-product facility\n",
"\n",
"A common formulation for the problem of maximizing profit of a multi-product facility in a resource constrained environment is given by the following LP\n",
"\n",
"$$\n",
"\\begin{align*}\n",
"\\max\\ \\text{profit} = \\sum_{j\\in J} c_j x_j &\\\\\n",
"\\text{s.t.} \\qquad \\sum_{j\\in J} a_{ij}x_j & \\leq b_i & \\forall \\, i \\in I\\\\\n",
"x_j & \\geq 0 & \\forall \\, j\\in J,\n",
"\\end{align*}\n",
"$$\n",
"\n",
"where $x_j$ is the production of product $j\\in J$, $c_j$ is the net profit from producing and selling one unit of product $j$, $a_{i, j}$ is the amount of resource $i$ required to product a unit of product $j$, and $b_i$ is amount of resource $i\\in I$ available. If this data is available, then the linear programming solution can provide a considerable of information regarding an optimal production plan and the marginal value of additional resources.\n",
"\n",
"But what if coefficients of the model are uncertain? What should be the objective then? Does uncertainty change the production plan? Does the uncertainty change the marginal value assigned to resources? These are complex and thorny questions that will be largely reserved for later chapters of this book. However, it is possible to consider a specific situation within the current context.\n",
"\n",
"Consider a situation where there are multiple plausible models for the net profit. These might be a result of marketing studies or from considering plant operation under multiple scenarios, which we collect in a set $S$. The set of profit models could be written\n",
"\n",
"$$\n",
"\\begin{align*}\n",
"\\text{profit}_s & = \\sum_{j} c_j^s x_j & \\forall \\, s\\in S\n",
"\\end{align*}\n",
"$$\n",
"\n",
"where $s$ indexes the set of possible scenarios. The scenarios are all deemed equal, no probabilistic interpretation is given.\n",
"\n",
"One conservative criterion is to find maximize profit for the worst case. Letting $z$ denote the profit for the worst case, this criterion requires finding a solution for ${x_j}$ for ${j\\in J}$ that satisfies\n",
"\n",
"$$\n",
"\\begin{align*}\n",
"\\max_{x_j} z & \\\\\n",
"\\\\\n",
"\\text{s.t.} \\qquad \\sum_{j\\in J} c_j^s x_j & \\geq z& \\forall \\, s\\in S\\\\\n",
"\\sum_{j\\in J} a_{ij}x_j & \\leq b_i & \\forall \\, i \\in I\\\\\n",
"x_j & \\geq 0 & \\forall \\, j\\in J\n",
"\\end{align*}\n",
"$$\n",
"\n",
"where $z$ is lowest profit that would be encountered under any condition.\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": [],
"id": "HSYGoJVXRYmi"
},
"source": [
"## Data"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 437
},
"id": "l5emuDb-2xFf",
"outputId": "868da491-de0e-454d-91e5-c7f18345be2b"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"\n",
"Profit scenarios\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
" product 1 product 2\n",
"scenarios \n",
"0 12 9\n",
"1 11 10\n",
"2 8 11"
],
"text/html": [
"\n",
"
\n",
"
\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" product 1 \n",
" product 2 \n",
" \n",
" \n",
" scenarios \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 12 \n",
" 9 \n",
" \n",
" \n",
" 1 \n",
" 11 \n",
" 10 \n",
" \n",
" \n",
" 2 \n",
" 8 \n",
" 11 \n",
" \n",
" \n",
"
\n",
"
\n",
"
\n",
"
\n"
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"\n",
"Available resources and resource requirements\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
" available product 1 product 2\n",
"resource \n",
"silicon 1000 1 0\n",
"germanium 1500 0 1\n",
"plastic 1750 1 1\n",
"copper 4000 1 2"
],
"text/html": [
"\n",
" \n",
"
\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" available \n",
" product 1 \n",
" product 2 \n",
" \n",
" \n",
" resource \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" silicon \n",
" 1000 \n",
" 1 \n",
" 0 \n",
" \n",
" \n",
" germanium \n",
" 1500 \n",
" 0 \n",
" 1 \n",
" \n",
" \n",
" plastic \n",
" 1750 \n",
" 1 \n",
" 1 \n",
" \n",
" \n",
" copper \n",
" 4000 \n",
" 1 \n",
" 2 \n",
" \n",
" \n",
"
\n",
"
\n",
"
\n",
"
\n"
]
},
"metadata": {}
}
],
"source": [
"import pandas as pd\n",
"\n",
"BIM_scenarios = pd.DataFrame(\n",
" [[12, 9], [11, 10], [8, 11]], columns=[\"product 1\", \"product 2\"]\n",
")\n",
"\n",
"BIM_scenarios.index.name = \"scenarios\"\n",
"print(\"\\nProfit scenarios\")\n",
"display(BIM_scenarios)\n",
"\n",
"BIM_resources = pd.DataFrame(\n",
" [\n",
" [\"silicon\", 1000, 1, 0],\n",
" [\"germanium\", 1500, 0, 1],\n",
" [\"plastic\", 1750, 1, 1],\n",
" [\"copper\", 4000, 1, 2],\n",
" ],\n",
" columns=[\"resource\", \"available\", \"product 1\", \"product 2\"],\n",
")\n",
"BIM_resources = BIM_resources.set_index(\"resource\")\n",
"\n",
"print(\"\\nAvailable resources and resource requirements\")\n",
"display(BIM_resources)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "14qQjuLjRYmm"
},
"source": [
"## AMPL Model\n",
"\n",
"An implementation of the maximum worst-case profit model."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"id": "r8psjmpWRYmn",
"outputId": "0cfde00e-f181-4d77-9dfa-918bfe5dd759",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Overwriting maxmin.mod\n"
]
}
],
"source": [
"%%writefile maxmin.mod\n",
"\n",
"set I;\n",
"set J;\n",
"set S;\n",
"\n",
"param a{I,J};\n",
"param b{I};\n",
"param c{S,J};\n",
"\n",
"var x{J} >= 0;\n",
"var z;\n",
"\n",
"maximize profit: z;\n",
"s.t. scenario_profit {s in S}: z <= sum{j in J} c[s, j] * x[j];\n",
"s.t. resource_limits {i in I}: sum{j in J} a[i, j] * x[j] <= b[i];"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"id": "m33AGCU_PSJw",
"tags": [],
"outputId": "a473bb3b-6ade-45e3-c912-61a402a75611",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 220
}
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"HiGHS 1.5.3: \b\b\b\b\b\b\b\b\b\b\b\b\bHiGHS 1.5.3: optimal solution; objective 17500\n",
"3 simplex iterations\n",
"0 barrier iterations\n",
" \n",
"\n",
"Worst case profit = 17500.0\n",
"\n",
"Worst case production plan:\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"product 1 583.333333\n",
"product 2 1166.666667\n",
"Name: worst case, dtype: float64"
]
},
"metadata": {}
}
],
"source": [
"def maxmin(scenarios, resources):\n",
" products = resources.columns.tolist()\n",
" products.remove(\"available\")\n",
"\n",
" model = AMPL()\n",
" model.read(\"maxmin.mod\")\n",
"\n",
" model.set[\"I\"] = resources.index.values\n",
" model.set[\"J\"] = products\n",
" model.set[\"S\"] = scenarios.index.values\n",
"\n",
" model.param[\"a\"] = resources.drop(\"available\", axis=1)\n",
" model.param[\"b\"] = resources[\"available\"]\n",
" model.param[\"c\"] = scenarios\n",
"\n",
" return model\n",
"\n",
"\n",
"BIM = maxmin(BIM_scenarios, BIM_resources)\n",
"BIM.option[\"solver\"] = SOLVER\n",
"BIM.solve()\n",
"\n",
"worst_case_plan = pd.Series(BIM.var[\"x\"].to_dict(), name=\"worst case\")\n",
"worst_case_profit = BIM.obj[\"profit\"].value()\n",
"\n",
"print(\"\\nWorst case profit =\", worst_case_profit)\n",
"print(f\"\\nWorst case production plan:\")\n",
"display(worst_case_plan)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "zvtlhimyRYmr"
},
"source": [
"## Is maximizing the worst case a good idea?\n",
"\n",
"Maximizing the worst case among all cases is a conservative planning outlook. It may be worth investigating alternative planning outlooks.\n",
"\n",
"The first step is to create a model to optimize a single scenario. Without repeating the mathematical description, the following AMPL model is simply the `maxmin` model adapted to a single scenario."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"id": "4tfSznFlRYms",
"outputId": "aeefb674-9358-4f04-acf7-78ed868a6857",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Overwriting max_profit.mod\n"
]
}
],
"source": [
"%%writefile max_profit.mod\n",
"\n",
"set I;\n",
"set J;\n",
"\n",
"param a{I,J};\n",
"param b{I};\n",
"param c{J};\n",
"\n",
"var x{J} >= 0;\n",
"\n",
"maximize profit: sum{j in J} c[j] * x[j];\n",
"s.t. resource_limits {i in I}: sum{j in J} a[i, j] * x[j] <= b[i];"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"id": "b7b_B-BPRYmu"
},
"outputs": [],
"source": [
"def max_profit(scenario, resources):\n",
" products = resources.columns.tolist()\n",
" products.remove(\"available\")\n",
"\n",
" model = AMPL()\n",
" model.read(\"max_profit.mod\")\n",
"\n",
" model.set[\"I\"] = resources.index.values\n",
" model.set[\"J\"] = products\n",
"\n",
" model.param[\"a\"] = resources.drop(\"available\", axis=1)\n",
" model.param[\"b\"] = resources[\"available\"]\n",
" model.param[\"c\"] = scenario\n",
"\n",
" return model"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "v5iUTqtPRYmu"
},
"source": [
"## Optimizing for the mean scenario\n",
"\n",
"The next cell computes the optimal plan for the mean scenario."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"tags": [],
"id": "toOnt8VxRYmv",
"outputId": "5af1d9c0-398b-4f91-9222-c9c03f0467dd",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"HiGHS 1.5.3: \b\b\b\b\b\b\b\b\b\b\b\b\bHiGHS 1.5.3: optimal solution; objective 17833.33333\n",
"1 simplex iterations\n",
"0 barrier iterations\n",
" \n",
"\n",
"Mean case profit = 17833.3\n",
"\n",
"Mean case production plan:\n",
"product 1 1000\n",
"product 2 750\n",
"Name: mean case, dtype: int64\n"
]
}
],
"source": [
"# create mean scenario\n",
"mean_case = max_profit(BIM_scenarios.mean(), BIM_resources)\n",
"mean_case.option[\"solver\"] = SOLVER\n",
"mean_case.solve()\n",
"\n",
"mean_case_profit = mean_case.obj[\"profit\"].value()\n",
"mean_case_plan = pd.Series(mean_case.var[\"x\"].to_dict(), name=\"mean case\")\n",
"\n",
"print(f\"\\nMean case profit = {mean_case_profit:0.1f}\")\n",
"print(\"\\nMean case production plan:\")\n",
"print(mean_case_plan)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "S67ZL2EYRYmw"
},
"source": [
"The expected profit under the mean scenario if 17,833 which is 333 greater than for the worst case. Also note the production plan is different.\n",
"\n",
"Which plan should be preferred? The one that produces a guaranteed profit of 17,500 under all scenarios, or one that produces expected profit of 17,833?"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"tags": [],
"id": "CNEz96YZRYmy",
"outputId": "f11ef3d1-2fe2-4025-8273-c3b7c98eea64",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 450
}
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
""
],
"image/png": "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oWvXrnB3d8fYsWNhbm4OpVIJpVKJTZs2ITExEU2aNMG4ceMwf/78Z56vQqHAzz//DAsLC3To0AG+vr6oW7cuNm/eLNX4+flh2rRpmDRpElq2bIm7d+9i8ODBGtOZMGECdHR04Obmhlq1aiE9PR1WVlY4dOgQcnNz4ePjg+bNm2PNmjXSUZ3Ro0cjJCQE48ePh7u7OyIjI7Fr1y40aNDgmZZp+PDhWLt2LdavXw93d3f4+PggPDwczs7OAABTU1PMmzcPLVq0QMuWLZGWloa9e/e+FI9PetkoxOMnKl8jOTk5MDMzQ3Z2NlQqVXU3h4hk5v79+0hNTYWzszMMDQ2ruzlEr5SK/n4q+/3N2EdERESyxJBDREREssSQQ0RERLLEkENERESyxJBDRPScvca/7yB6alXxd8ObAVLVCDWr7hZUTmh2dbeAXiMld6gtKCiosrvnEr0uSh7+WtZjNSqLIYeI6DnR1dWFsbExbty4AT09Pd7HhKgShBC4d+8erl+/DnNzc+mfhafBkENE9JwoFArY2toiNTUV//3vf6u7OUSvFHNzc42nwj8NhhwioudIX18fDRo0KPUQSiIqn56e3jMdwSnBkENE9JwplUre8ZioGvAEMREREckSQw4RERHJEkMOERERyRJDDhEREckSQw4RERHJEkMOERERyRJDDhEREckSQw4RERHJEkMOERERyRJDDhEREckSQw4RERHJEkMOERERyRJDDhEREckSn0JORPIValbdLXiy0OzqbgGRbPFIDhEREckSQw4RERHJEkMOERERyRJDDhEREckSQw4RERHJEkMOERERyRJDDhEREckSQw4RERHJEkMOERERyRJDDhEREckSQw4RERHJEkMOERERyRJDDhEREckSQw4RERHJEkMOERERyRJDDhEREckSQw4RERHJEkMOERERyRJDDhEREckSQw4RERHJEkMOERERyRJDDhEREckSQw4RERHJEkMOERERyRJDDhEREckSQw4RERHJEkMOERERyRJDDhEREckSQw4RERHJEkMOERERyZJudTeAiF49Tp9HVHcTKiXNsLpbQETViUdyiIiISJa0DjlHjhxBz549YWdnB4VCgZ07d2oMz83NRXBwMN544w0YGRnBzc0Nq1at0qi5f/8+Ro0aBSsrK5iYmKBv377IysrSqElPT0f37t1hbGyM2rVrY+LEiXj48KFGTUxMDLy8vGBgYID69esjPDxc28UhIiIimdI65OTl5cHDwwMrVqwoc3hISAgiIyPxn//8B8nJyRg7diyCg4Oxa9cuqWbcuHHYvXs3tm7ditjYWPz555/o06ePNLyoqAjdu3dHQUEBjh8/jg0bNiA8PBzTp0+XalJTU9G9e3d06tQJSUlJGDt2LIYPH479+/dru0hEREQkQwohhHjqkRUK7NixA4GBgVK/Jk2aYMCAAZg2bZrUr3nz5ggICMAXX3yB7Oxs1KpVCz/88AP69esHAPjtt9/g6uqK+Ph4tG7dGvv27UOPHj3w559/wtraGgCwatUqfPbZZ7hx4wb09fXx2WefISIiAufPn5fm88477+DOnTuIjIysVPtzcnJgZmaG7OxsqFSqp10NBAChZtXdgsoJza7uFsjCq3NNzrvV3YQn4zZJpLXKfn9X+TU5bdq0wa5du/C///0PQggcPnwYly5dQteuXQEAiYmJKCwshK+vrzSOi4sLHBwcEB8fDwCIj4+Hu7u7FHAAwM/PDzk5Obhw4YJU8+g0SmpKplGWBw8eICcnR+NFRERE8lTlIWfZsmVwc3PDG2+8AX19ffj7+2PFihXo0KEDACAzMxP6+vowNzfXGM/a2hqZmZlSzaMBp2R4ybCKanJycpCfn19m28LCwmBmZia97O3tn3l5iYiI6OX0XELOL7/8gl27diExMRELFy7EqFGjcPDgwaqeldYmT56M7Oxs6XXt2rXqbhIRERE9J1V6n5z8/Hz8+9//xo4dO9C9e3cAQNOmTZGUlIQFCxbA19cXNjY2KCgowJ07dzSO5mRlZcHGxgYAYGNjg5MnT2pMu+TXV4/WPP6LrKysLKhUKhgZGZXZPgMDAxgYGFTJshIREdHLrUqP5BQWFqKwsBBKpeZkdXR0oFarARRfhKynp4fo6GhpeEpKCtLT0+Ht7Q0A8Pb2xrlz53D9+nWpJioqCiqVCm5ublLNo9MoqSmZBhEREb3etD6Sk5ubiytXrkjdqampSEpKgqWlJRwcHODj44OJEyfCyMgIjo6OiI2NxXfffYdFixYBAMzMzDBs2DCEhITA0tISKpUKn376Kby9vdG6dWsAQNeuXeHm5oZBgwZh3rx5yMzMxNSpUzFq1CjpSMxHH32E5cuXY9KkSfjggw9w6NAhbNmyBRERr8avPoiIiOj50jrkJCQkoFOnTlJ3SEgIAOD9999HeHg4Nm3ahMmTJ2PgwIG4desWHB0d8eWXX+Kjjz6Sxlm8eDGUSiX69u2LBw8ewM/PDytXrpSG6+joYM+ePfj444/h7e2NGjVq4P3338esWbOkGmdnZ0RERGDcuHFYsmQJ3njjDaxduxZ+fn5PtSKIiIhIXp7pPjmvOt4npwrxPjmvFd4npwpxmyTSWrXdJ4eIiIjoZcCQQ0RERLLEkENERESyVKX3yXllPcwDHuqU7q/QAXQMNevKpQR0H7k/j1a19wCUd2mUAtA1fsrafADq8puhW+PpaovuA6LosVk/0iahKLt/WQQAKJ5vLcQ/b8v6XHSMAMXfeb+oABCF5U9XaQgodbSvVRcC6oIKag0Ape5T1D4E1A8qqNUHlHpPUVsEqO+XW6qnKEShKK5VoggGivLXw0PoSLUKqGGoKH/ZtKktgg4K/q4FBIwUZSxbmdvlI9tDebTahp+xtsx9hQz3EU9bq2MMKP5eb0UPAPGwimq1+LvnPqKM2or3EVDoATr62tcKNVBU9lMLStVWAkMOAGy3A4zL6G/XDej4yAWW22oDRffKnkZtH8A35p/un52AB3+VXWvZAvA/9U93hBuQ99+ya83cgO4X/une3xLIvlh2bQ1HoFfaP90HOwC3EsquNagJ9L3xT3dMAHA9tuxaHWNgwCM74qN9gT/3atY0eOT9pUcuArPJB0wr2NFcNv1nf1z7PmBWwQ7hqglQ9PcOrNZ9wLyC2t9NgId/19Z8AFj+vUPYYlK6ttt5wLxx8fsLc4DzM8ufrt9JwKpl8fuUJUDSpPJruxwGrDsWv7/yLZAQXH6tzx6gTvENNJG2EfhlaPm17bYADm8Xv/9jB3Csf/m1rdcDdYcUv8/YD8T2KL+2xXKg4aji9zeOAtGdyi0dWnMovr3RFwDQxOgqdjUIKbf266wgfJ01EABQ3+AaohqNKrd29Y0+CMv4AABQR+8GjrkOK7f2u7+6Y/qfHwMALHVycLrxwHJrka0HZP0dGhQAGtwtv/auLpDxyA6hotpcXeDPR2rr3S3/+Pg9HeCPR77cnXMBXVH2NinHfcSj3n0khB0fBFz7qfza/rn/hKKTHwKpG8qv7XMdMKxV/P50CHB5Zfm1/0oFTJyK3/86BUheUH4t9xHFtNhHoNk8wG1i8fvbp4H9b5Zf22QG0DS0+H12MrC3Sfm1rhMAz/nlD38MT1cRERGRLPEn5GZmyL75Z9k/QePpqrJryzq8/KXtP+9f5tNVUzJK1/JQdBm1FR9ebjAt6pU4XZVs+Mh/uy/r6aqytkk57iOetpanq/6ufbX2Ec/7dFVlf0LO01VA8R/co390FdVpM81K15Z1rqwqast+htcz1z4a/EqIcr41yuv/Imuh+Gef/6TPRUcfQCXP92pTq9T7Z+dQpbW6/+zMqrRWB1CWv64KxT/tU0MH+aKMa9rKIKBEvihj+3nGWkBRdm2Z24mi/AxQZkOe8zZcqX2PDPYRVVJrAKCSzx/UqvY5/d2/xvuIp65VKLX7/nzSrKtsSkREREQvEYYcIiIikiWGHCIiIpIlhhwiIiKSJYYcIiIikiWGHCIiIpIl/oQcwL2Ch9AtKH0/BaVCAUM9HY268jxLbX5BEUQ5v2lVQAEj/aervV9YBHUFt0Ey1tetulrxz081jR+5X8l9oQd1BVnaCA+k21o8ELooQvk/Rdam1hAFUP59H5ICoYOHJZt6GZ+Loa4OlErF34PVeKgu/14gBro60HmK2sIiNQqLyq/V11FCV0epde3DIjUKKqjV01FC7ylqi9QCDx5WcO+SV8S9v7dLHRTBQFH82QsB5Ffw02Il1DB85L4/98Rzrq3EvkcW+4inrDXS04Hi7z/8Bw+LUKSumlpt/u65jyhd+6R9hK5SCX1d7WvVaoH7laytDN4M0MwM9mO3QGlQ+t4SnRrVwvqh/9yK2nVaJPILy175rZwtsflDb6nba3YUbuWVfbOmpm+YYVdwO6m77dxD+N+dsm9+1KC2CaJCfKTutxbF4vL13DJr65gbIe7zzlL3v5Yfw69/ZJdZa1lDH6envSV1D1gdjxOpt8qsNdLTQfJsf6l76PqTOJxyo8xaAEgzfFd6/0nBGOxVtyq39qLBUCkUjS/4ENvUPuXWJhp8CCtF8S32pxUOwfdFXcutPao/GvbK4sdqzCl8F98WlX+r8gPjOqChtSkAYHHUJSyJvlxu7c+j2sLD3hwAsDr2KsL2/VZu7Y8jWsO7nhUA4Lv4NEz/+UK5teuGtEBnF2sAwNaEa5j406/l1q541wvdmxbffDHi1wyM+uF0ubXz+zXF2y3sAQCHfsvCB+Hl3MIfwKxejTHY2wkAEH/1JoLW/FJu7aumrzIWC/VXAygOF24P1pdb2015Aiv1l0jdTvd/KLe2k/IM1uv/c4t51/vrkI+y7/vSSnERmw2+kLq97q/CLZR9EzPZ7yPmdpfef7IxEXvPZZZbe3GWnxSKxm85i22n/yi3NnGqL6xMisPjtJ3n8f0v5TwKA8DRSZ1gb1m835+zNxnfHvm93FruI4pps4+YHOCCD33qAQDOXruDXiviyq0d06UBxr3VEABwKesuui4+Um7tyA518e9urpW+GSBPVxEREZEs8UiOmRkybtwsMwnydJUWtV/a/VP7Mp+umvJn6Voeii5V+6TDy27T95c77GVy0aD4sQ4v9emqMrZJWe4jnrKWp6uKvWr7iOd9uoqPddCCsb6uxh9dRXXaTLOyHt3pVGXtozvJ515bxnODAGjs1J+k+EuogmfNPGWtvqII+vj7j+YJn4u+rhL6lTzAqU3tozuHqqzVfWRnVpW1OkqFVtvwy8q4jO1SoQCMUcHzeSoxjSqtrcR6lsU+ogpqDXSfT+3z+rvnPkL7WmUV73t4uoqIiIhkiSGHiIiIZIkhh4iIiGSJIYeIiIhkiSGHiIiIZIkhh4iIiGSJIYeIiIhkiSGHiIiIZIkhh4iIiGTp1b+laRUo7ynkpIUKbmf/UuHn/Fqp6DELLw1uk0Raq+jRSY/is6sqeAo5ERERvXzUD+7h2tf9+RRyIiIiej3xSE4FTyF/WbwKT3wuedrzS6+MJz6T9l6FbRJ4RbZLbpNV5lXYLi/O8qvuJshCTk4ObGtZ8SnklVHZp5BT+bR5+nK14uf8Wnkltktuk68VftdUjYeVfar5c24HERERUbVgyCEiIiJZYsghIiIiWWLIISIiIlliyCEiIiJZYsghIiIiWWLIISIiIlliyCEiIiJZYsghIiIiWWLIISIiIlliyCEiIiJZYsghIiIiWWLIISIiIlliyCEiIiJZYsghIiIiWWLIISIiIlliyCEiIiJZYsghIiIiWWLIISIiIlliyCEiIiJZYsghIiIiWWLIISIiIlliyCEiIiJZYsghIiIiWWLIISIiIlliyCEiIiJZYsghIiIiWWLIISIiIlliyCEiIiJZYsghIiIiWdI65Bw5cgQ9e/aEnZ0dFAoFdu7cqTFcoVCU+Zo/f75Uc+vWLQwcOBAqlQrm5uYYNmwYcnNzNabz66+/on379jA0NIS9vT3mzZtXqi1bt26Fi4sLDA0N4e7ujr1792q7OERERCRTWoecvLw8eHh4YMWKFWUOz8jI0HitW7cOCoUCffv2lWoGDhyICxcuICoqCnv27MGRI0cwcuRIaXhOTg66du0KR0dHJCYmYv78+QgNDcW3334r1Rw/fhxBQUEYNmwYzpw5g8DAQAQGBuL8+fPaLhIRERHJkK62IwQEBCAgIKDc4TY2NhrdP//8Mzp16oS6desCAJKTkxEZGYlTp06hRYsWAIBly5ahW7duWLBgAezs7LBx40YUFBRg3bp10NfXR+PGjZGUlIRFixZJYWjJkiXw9/fHxIkTAQCzZ89GVFQUli9fjlWrVmm7WERERCQzz/WanKysLERERGDYsGFSv/j4eJibm0sBBwB8fX2hVCpx4sQJqaZDhw7Q19eXavz8/JCSkoLbt29LNb6+vhrz8/PzQ3x8fLntefDgAXJycjReREREJE/PNeRs2LABpqam6NOnj9QvMzMTtWvX1qjT1dWFpaUlMjMzpRpra2uNmpLuJ9WUDC9LWFgYzMzMpJe9vf3TLxwRERG91J5ryFm3bh0GDhwIQ0PD5zmbSps8eTKys7Ol17Vr16q7SURERPScaH1NTmUdPXoUKSkp2Lx5s0Z/GxsbXL9+XaPfw4cPcevWLel6HhsbG2RlZWnUlHQ/qebxa4IeZWBgAAMDg6dbICIiInqlPLcjOf/3f/+H5s2bw8PDQ6O/t7c37ty5g8TERKnfoUOHoFar0apVK6nmyJEjKCwslGqioqLQqFEjWFhYSDXR0dEa046KioK3t/fzWiQiIiJ6hWgdcnJzc5GUlISkpCQAQGpqKpKSkpCeni7V5OTkYOvWrRg+fHip8V1dXeHv748RI0bg5MmTiIuLQ3BwMN555x3Y2dkBAN59913o6+tj2LBhuHDhAjZv3owlS5YgJCREms6YMWMQGRmJhQsX4rfffkNoaCgSEhIQHBys7SIRERGRDGkdchISEuDp6QlPT08AQEhICDw9PTF9+nSpZtOmTRBCICgoqMxpbNy4ES4uLujSpQu6deuGdu3aadwDx8zMDAcOHEBqaiqaN2+O8ePHY/r06Rr30mnTpg1++OEHfPvtt/Dw8MBPP/2EnTt3okmTJtouEhEREcmQQgghqrsR1SUnJwdmZmbIzs6GSqWq7uaUy+nziOpuwhOlGb5b3U2onNDs6m6BLLwK2yTwimyX3CarzKuwXabN7V7dTZCFyn5/89lVREREJEsMOURERCRLDDlEREQkSww5REREJEsMOURERCRLDDlEREQkSww5REREJEsMOURERCRLDDlEREQkSww5REREJEsMOURERCRLDDlEREQkSww5REREJEsMOURERCRLDDlEREQkSww5REREJEsMOURERCRLDDlEREQkSww5REREJEsMOURERCRLDDlEREQkSww5REREJEsMOURERCRLDDlEREQkSww5REREJEsMOURERCRLDDlEREQkSww5REREJEsMOURERCRLDDlEREQkSww5REREJEsMOURERCRLDDlEREQkSww5REREJEsMOURERCRLDDlEREQkSww5REREJEsMOURERCRLDDlEREQkSww5REREJEsMOURERCRLDDlEREQkSww5REREJEsMOURERCRLDDlEREQkSww5REREJEsMOURERCRLDDlEREQkS7rV3QAiIqLXRqhZdbfgyUKzq7sFVYZHcoiIiEiWGHKIiIhIlhhyiIiISJYYcoiIiEiWGHKIiIhIlhhyiIiISJYYcoiIiEiWGHKIiIhIlhhyiIiISJYYcoiIiEiWGHKIiIhIlhhyiIiISJYYcoiIiEiWGHKIiIhIlrQOOUeOHEHPnj1hZ2cHhUKBnTt3lqpJTk7Gv/71L5iZmaFGjRpo2bIl0tPTpeH379/HqFGjYGVlBRMTE/Tt2xdZWVka00hPT0f37t1hbGyM2rVrY+LEiXj48KFGTUxMDLy8vGBgYID69esjPDxc28UhIiIimdI65OTl5cHDwwMrVqwoc/jVq1fRrl07uLi4ICYmBr/++iumTZsGQ0NDqWbcuHHYvXs3tm7ditjYWPz555/o06ePNLyoqAjdu3dHQUEBjh8/jg0bNiA8PBzTp0+XalJTU9G9e3d06tQJSUlJGDt2LIYPH479+/dru0hEREQkQ7rajhAQEICAgIByh0+ZMgXdunXDvHnzpH716tWT3mdnZ+P//u//8MMPP6Bz584AgPXr18PV1RW//PILWrdujQMHDuDixYs4ePAgrK2t0axZM8yePRufffYZQkNDoa+vj1WrVsHZ2RkLFy4EALi6uuLYsWNYvHgx/Pz8tF0sIiIikpkqvSZHrVYjIiICDRs2hJ+fH2rXro1WrVppnNJKTExEYWEhfH19pX4uLi5wcHBAfHw8ACA+Ph7u7u6wtraW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\n"
},
"metadata": {}
}
],
"source": [
"mean_case_outcomes = BIM_scenarios.dot(mean_case_plan)\n",
"mean_case_outcomes.name = \"mean outcomes\"\n",
"\n",
"worst_case_outcomes = BIM_scenarios.dot(worst_case_plan)\n",
"worst_case_outcomes.name = \"worst case outcomes\"\n",
"\n",
"ax = pd.concat([worst_case_outcomes, mean_case_outcomes], axis=1).plot(\n",
" kind=\"bar\", ylim=(15000, 20000)\n",
")\n",
"ax.axhline(worst_case_profit)\n",
"ax.axhline(worst_case_outcomes.mean(), linestyle=\"--\", label=\"worst case plan, mean\")\n",
"ax.axhline(\n",
" mean_case_outcomes.mean(),\n",
" linestyle=\"--\",\n",
" color=\"orange\",\n",
" label=\"mean case plan, mean\",\n",
")\n",
"_ = ax.legend()"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"id": "4GDdYi7ORYmz",
"outputId": "b4eafbe7-9eb9-42a3-a49f-4de66b245464",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 483
}
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
""
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAHSCAYAAADylfF7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAypUlEQVR4nO3de1xU1f7/8feACogOiMkA5YWOmJp4xRQ1tSSveTStlEOm5cm+JfZVu6jfkrwVZmZlmh61vJzsXvr1WJmmKaWECtFFSS0t7KtghTBeErnM7w8f7l+Tl1AHh4Wv5+Mxj0ez1tqzPyOueLv32nvbXC6XSwAAAAbx8XYBAAAAF4oAAwAAjEOAAQAAxiHAAAAA4xBgAACAcQgwAADAOAQYAABgHAIMAAAwThVvF1BeSktLdeDAAdWsWVM2m83b5QAAgDJwuVw6cuSIIiIi5ONz7uMslTbAHDhwQHXr1vV2GQAA4CLs379f11xzzTn7K22AqVmzpqRTfwB2u93L1QAAgLJwOp2qW7eu9Xv8XCptgDl92shutxNgAAAwzF8t/7jgRbwpKSnq27evIiIiZLPZtHLlSquvqKhI48aNU3R0tAIDAxUREaG7775bBw4ccPuMvLw8JSQkyG63Kzg4WMOHD9fRo0fdxnz99de68cYb5e/vr7p162rGjBkXWioAAKikLjjAHDt2TC1atNDcuXPP6Dt+/LgyMjI0ceJEZWRk6P3339euXbv097//3W1cQkKCduzYoXXr1mn16tVKSUnRiBEjrH6n06nu3burfv36Sk9P17PPPqtJkyZpwYIFF/EVAQBAZWNzuVyui97YZtOKFSvUv3//c47Ztm2bbrjhBv3000+qV6+esrKy1LRpU23btk0xMTGSpDVr1qh37976+eefFRERoXnz5unxxx9XTk6OqlWrJkkaP368Vq5cqe+++65MtTmdTgUFBamgoIBTSAAAGKKsv7/LfQ1MQUGBbDabgoODJUmpqakKDg62woskxcXFycfHR2lpabrtttuUmpqqzp07W+FFknr06KFnnnlGhw8fVq1atc7YT2FhoQoLC633TqezTPWVlJSoqKjoIr8dTFGtWrXzXo4HADBLuQaYEydOaNy4cYqPj7dSVE5OjkJDQ92LqFJFISEhysnJscZERka6jXE4HFbf2QJMcnKyJk+eXObaXC6XcnJylJ+ffyFfCYby8fFRZGSkWygGAJir3AJMUVGR7rzzTrlcLs2bN6+8dmOZMGGCxo4da70/fRnWuZwOL6GhoapevTo3u6vETt/U8ODBg6pXrx4/awCoBMolwJwOLz/99JM2bNjgdg4rLCxMhw4dchtfXFysvLw8hYWFWWNyc3Pdxpx+f3rMn/n5+cnPz69M9ZWUlFjhpXbt2mX+XjBXnTp1dODAARUXF6tq1areLgcAcIk8vijgdHjZs2ePPvnkkzMCQmxsrPLz85Wenm61bdiwQaWlpWrXrp01JiUlxW1tyrp163Tddded9fTRxdQoSdWrV7/kz4IZTp86Kikp8XIlAABPuOAAc/ToUWVmZiozM1OStG/fPmVmZio7O1tFRUW6/fbbtX37di1fvlwlJSXKyclRTk6OTp48KUlq0qSJevbsqfvuu09bt27V5s2blZiYqMGDBysiIkKS9I9//EPVqlXT8OHDtWPHDr311lt68cUX3U4ReQKnEq4c/KwBoJJxXaBPP/3UJemM19ChQ1379u07a58k16effmp9xm+//eaKj4931ahRw2W321333HOP68iRI277+eqrr1ydOnVy+fn5ua6++mrX9OnTL6jOgoIClyRXQUHBGX2///67a+fOna7ff//9Qr8+DMXPHADMcL7f3390wWtgunbtKtd5bh1zvr7TQkJC9Prrr593TPPmzfXZZ59daHkAAOAKUGmfhXQxGoz/4LLu78fpfS7r/jyhLDcvBACgvHFnL1hOr1MCAKCiI8AYYvXq1QoODrauosnMzJTNZtP48eOtMf/85z911113We/fe+89XX/99fLz81ODBg303HPPuX1mgwYNNHXqVN19992y2+0aMWKETp48qcTERIWHh8vf31/169dXcnKyNV6SbrvtNtlsNuv92fz888+Kj49XSEiIAgMDFRMTo7S0NEnSDz/8oH79+snhcKhGjRpq27atPvnkE7ftX375ZUVFRcnf318Oh0O333671VdaWqrk5GRFRkYqICBALVq00Lvvvnvhf6gAAGNxCskQN954o44cOaIvv/xSMTEx2rRpk6666ipt3LjRGrNp0yaNGzdOkpSenq4777xTkyZN0qBBg7RlyxY9+OCDql27toYNG2ZtM3PmTCUlJenJJ5+UJM2ePVurVq3S22+/rXr16mn//v3av3+/pFPPtQoNDdXixYvV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\n"
},
"metadata": {}
}
],
"source": [
"ax = pd.concat([worst_case_plan, mean_case_plan], axis=1).plot(kind=\"bar\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "2Kqrez5lRYm0"
},
"source": [
"## Summary\n",
"\n",
"Planning for the worst case reduces the penalty of a bad outcome. But it comes at the cost of reducing the expected payout, the also the maximum payout should the most favorable scenario occur.\n",
"\n",
"1. Which plan would you choose. Why? \n",
"\n",
"2. Make a case for the other choice.\n",
"\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.2"
},
"colab": {
"provenance": []
}
},
"nbformat": 4,
"nbformat_minor": 0
}