{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# Optimizing a newsvendor problem with JuMP" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "using JuMP, CairoMakie\n", "import HiGHS" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Let's use a simple newspaper example" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Our Profit for one day with supply 42 is: $ 70\n" ] } ], "source": [ "newspaper_cost = 5\n", "customer_price = 7\n", "\n", "supply = 42\n", "demand = 40\n", "\n", "# Daily Profit is equal to the newspapers sold less the cost we paid for it\n", "function profit(demand, supply, customer_price, newspaper_cost) \n", " return (min.(demand, supply) .* customer_price) .- (newspaper_cost .* supply)\n", "end\n", "\n", "# one day\n", "single_profit = profit(demand, supply, customer_price, newspaper_cost)\n", "println(\"Our Profit for one day with supply $supply is: \\$ $single_profit\")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Based on this model, we set a constant daily `supply` level and calculate the profit given uncertain, fluctuating demand. How will our strategy perform over 3 days, where one day we have demand that exceeds our supply and another day in which our demand is much less than supply?" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Our Profit for three days with supply 42 is: $ sum(multi_day_profit)\n" ] } ], "source": [ "# two days\n", "three_day_demand = [40, 60, 25]\n", "multi_day_profit = profit(three_day_demand, supply, customer_price, newspaper_cost)\n", "\n", "println(\"Our Profit for three days with supply $supply is: \\$ $sum(multi_day_profit)\")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "We see that with the cost and sales price assumptions in this model, there's a profit hit on day 3 that brings down the 3-day profit." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyAAAAGQCAIAAADZR5NjAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzda0ATZ9428HsmgSRAEEQkUEACFAGtiodaqoIlPWnZWlpX26JWS4uHKuv6VO1BurpWdx+7a6uuVmvFQ7tq1+1rhW1FS9VawNqq4BGVgCAqoJxCCEkgybwf5nE2RYwJDISE6/eJ3HPIfyaT4Zp7JjMUwzAEAAAAAPhD27sAAAAAAGeDgAUAAADAMwQsAAAAAJ4hYAEAAADwDAELAAAAgGcIWAAAAAA8Q8ACAAAA4BkCFgAAAADPELAAAAAAeIaABQAAAMAzBCwAAAAAniFgAQAAAPAMAQsAAACAZwhYAAAAADxDwAIAAADgGQIWAAAAAM8QsAAAAAB4hoAFAAAAwDMELAAAAACeCe1dgJMrKCj4/vvv6+rqIiIipkyZ4uHhYc1Ue/bsOXDgwLBhw9555x1eykhNTW1sbHzkkUfef/99rnHx4sUVFRXPPPPMrFmzeHkXR5Genl5cXMz+TVFUQEBAeHj45MmTfX197VtYu3jfGKCHwM6hB3r//fdLSkq4lxKJJCws7NVXXw0NDe3YDBmG2bp164kTJzw8PDZs2DBo0KDq6uqtW7cmJSXxUrCFGaakpGg0mrfffnvkyJHWzCo3N/ezzz5TKpVarTYkJOS555577bXXXFxceKnzfmwt0tzp06fZPflzzz0nlUrZxsuXL2dnZ1dVVYWFhb344os+Pj48V2wTBrrMX//6V4qiuFUtk8mUSqU1Ey5dupQQ8swzz/BVCbuRURR14sQJrnHQoEGEkLfeeouvd3EUo0ePvveL4Ofnd+zYMXuX1g7eNwboCbBz6JlGjBhx785BJBJ99913HZvhP//5T3YmPj4+DMP4+fkRQvbs2cMwzLvvvjt69OiPP/64MwVbmGGfPn0IIfv377dmPmvXrr13wR9//PGWlpbOlPdANhVprq6url+/fmydRUVFbOPnn39ungj79u37448/8l2yDXCKsKuUl5cvW7aMoqh169bt3r07LCysqqrKvp0QDMMsWLCAYRg71tBzxMXF7dmzZ/fu3X/+85/79+9fXV09c+bMlpYWe9cFzg87hx7uiSee2LNnz549ez766KP+/fvr9fo//OEPHZtVQUEBIWTs2LHl5eWEkM8//3zfvn1jx44lhFy9evXkyZNlZWWdKZWXGarVaja4z549+9dffy0vL9+8ebOrq2t+fv7nn3/emfK6zrJly+rr681bampqFi5c2NraOnv27L179z7++ON1dXUzZsyw41aNU4Rd5fTp0waD4fHHH09LSyOEVFRULF26tKio6H7jf/fdd7t379ZoNC+99FKbQc3NzZ999tlPP/1UV1fn7+//4osvTp48mRCyevXqS5cujRw5cuHCheyYH3zwQWlp6UsvvXS//udTp05t37799ddfb3fo/v37MzMzb968OXjw4NTU1MjISELIO++8c+PGjVdeeeW5554zmUyvv/66wWB44403xo8ff+fOnT/+8Y+EkI8++qhfv37bt2///vvva2trBwwYkJyc/OSTTxJCmpqa5syZQwhZuXLlzp07T548GRERMW/evIEDB1peugdO2G61hJBp06axq+LXX3/97rvvuCPINuRy+csvv8z+PXXq1Ojo6LKysm3bts2dO/d+89fr9SkpKYSQ9PT0HTt2nDlzZtCgQe+++25zc/NHH310+fLl6Ojo9957TyaTWV40rshly5YdOnQoJydHLBbPnDnzueeee+DGAE4AO4cevnMIDQ3ldg5arfaDDz4oLi5Wq9VSqbTdORQVFW3duvXSpUuenp4jRoxYsGCBm5sbIWT37t0nT54khKhUqk8//fTtt9/OysrSaDRyufz48eNXr14lhJw5c2bXrl0zZswwL8DKFevv72/NDLds2fLtt9+KRKJ58+Y98cQT9y7vhQsXWltb2Xmy59pmz55dVFT073//u6SkhFvb7DsSQrZv3/7DDz/Exsa+9dZblj+LB35SHJu22MLCwi1btixYsOCTTz7hGk+fPt3U1CSRSD755BOxWBwZGTls2LDy8vLS0tKwsLB2P+guZ8feM+dWWVn5008/Xbp0iX3JbiJvvvlmuyOvW7fO/HzBgAEDyN2zAEajUaFQtPnU/v73vzMM89FHHxFCfHx8DAYDwzCNjY1s7+gvv/zSZv7sWYAXXniBpun+/furVCrmnrMAixYtYmdO0zQhxN3dPScnh2GYN954gxDyyiuvMAxz4cIFdpy0tDSGYb755htCiK+vr8lk4qID529/+xvDMHfu3GFfxsTEcIP69Olz5swZy0tnecL7VcvcPViZN28eudst3wZ7ivC1114zb3z66acJIa+++qqF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" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\"\"\"Plot Demand vs Profits\"\"\"\n", "function plot_profit(demand, supply, profit; bar_labels=true)\n", " N = length(demand)\n", " fig = Figure(resolution=(800,400))\n", "\n", " ax1 = Axis(fig[1,1], title=\"$N-day Newspaper Demand\")\n", " ax2 = Axis(fig[1,2], title=\"$N-day Newspaper Profit with Supply $supply\")\n", "\n", " colors = [i >= 0 ? :grey : :crimson for i in profit]\n", "\n", " if bar_labels\n", " demand_labels = demand\n", " profit_labels = profit\n", " else\n", " demand_labels = [\"\" for i in demand]\n", " profit_labels = [\"\" for i in profit]\n", " end\n", " barplot!(ax1, demand, \n", " bar_labels=demand_labels, \n", " label_size=16,\n", " label_offset=-30,\n", " color=colors)\n", " barplot!(ax2, profit, \n", " bar_labels=profit_labels, \n", " label_size=16,\n", " label_offset=-30,\n", " color=colors)\n", " return fig\n", "end\n", "\n", "plot_profit(three_day_demand, supply, multi_day_profit)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Finding the optimal supply level\n", "\n", "For this example I'll use the Julia `JuMP` optimization library to find the optimal daily supply level $s$ that maximizes the total daily profit. Our first step is to convert this word problem into an optimization problem:" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Let:\n", "\n", "* $p$ = the customer price\n", "* $d$ = demand\n", "* $s$ = daily supply strategy\n", "* $c$ = our newspaper cost\n", "\n", "Then we want to maximize the sum of daily profits over $N$ days. If we have both price and cost as fixed, then we have: \n", "\n", "$$\n", "\\begin{aligned}\n", "& \\max \\sum_i^N p* (\\min(d,s)) - cs \\\\\n", "&= \\max \\sum_i^N 7(\\min(d,s)) - 5s\n", "\\end{aligned}\n", "$$" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Because $\\min(d,s)$ is nonlinear, this can make finding an optimal solution a little difficult. Luckily, we have techniques to convert this problem into a linear one. [See this article on the Operations Research Stackexchange for more info.](https://or.stackexchange.com/questions/711/how-to-formulate-linearize-a-maximum-function-in-a-constraint/712#712)\n", "\n", "First, let $x = \\min(d,s)$. Then we can add some additional constraints and variables to convert this nonlinear optimization problem to a linear one:\n", "\n", "$$\n", "\\begin{aligned}\n", "\\max & \\sum_i^N 7x - 5s \\\\\n", "\\text{s.t.} & \\\\\n", "x & \\le d \\\\\n", "x & \\le i \\\\\n", "x & \\ge d - M(1-y) \\\\\n", "x & \\ge s - My \\\\\n", "s & \\ge 0 \\\\\n", "y & \\in \\{0,1\\}\n", "\\end{aligned}\n", "$$\n", "\n", "where $M$ is some reasonable solution. " ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$$ 7 x - 5 s $$" ], "text/plain": [ "7 x - 5 s" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 0. Params\n", "demand = 40\n", "M = 100\n", "\n", "# 1. Establish model\n", "model = Model(HiGHS.Optimizer)\n", "# Option: To Suppress all the printing, use `set_silent(model)`\n", "set_silent(model)\n", "\n", "# 2. Variables\n", "@variable(model, s >= 0, Int)\n", "@variable(model, x >= 0)\n", "@variable(model, y, Bin)\n", "\n", "# 3. Constraints\n", "# convert the min(d,i) nonlinear constraint to linear\n", "@constraint(model, x <= demand)\n", "@constraint(model, x <= s)\n", "@constraint(model, x >= demand - M*(1-y))\n", "@constraint(model, x >= s - M * y)\n", "\n", "# 4. Objective Function\n", "@objective(model, Max, (customer_price * x) - (newspaper_cost * s))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "40.0" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Optimize the model and print the value of $s$\n", "optimize!(model)\n", "value(s)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "80.0" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# What was the profit at this optimal value?\n", "objective_value(model)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Vectorizing in `JuMP` for multiple demand days\n", "\n", "This code is starting to get a little messy, because of that $\\min(d,s)$ constraint needs to be applied to each value of demand $d$ in an array.\n", "\n", "To implement this in JuMP we'll need to *vectorize* the constraints and the variables." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "optimize_problem" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "\"\"\"Wrap the optimization problem within a function\"\"\"\n", "function optimize_problem(demand)\n", " # 0. Params\n", " M = 100\n", " n = length(demand)\n", "\n", " # 1. Establish model\n", " model = Model(HiGHS.Optimizer)\n", " # Option: To Suppress all the printing, use `set_silent(model)`\n", " set_silent(model)\n", "\n", " # 2. Variables\n", " @variable(model, s >= 0, Int)\n", " @variable(model, x[i=1:n] >= 0) # Vectorize x \n", " @variable(model, y[i=1:n], Bin) # Vectorize y too\n", "\n", " # 3. Constraints\n", " # convert the min(d,i) nonlinear constraint to linear\n", " @constraint(model, x .<= demand) \n", " @constraint(model, x .<= s)\n", " @constraint(model, x .>= demand .- M .* (1 .- y))\n", " @constraint(model, x .>= s .- M .* y)\n", "\n", " # # 4. Objective Function\n", " @objective(model, Max, sum((customer_price .* x) .- (newspaper_cost .* s)))\n", " optimize!(model)\n", "\n", " return value(s)\n", "end" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "30.0" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "demand = [30, 30, 60, 25, 100]\n", "\n", "optimal_supply = optimize_problem(demand)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Once again we can plot the daily profit:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyAAAAGQCAIAAADZR5NjAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzde1wU9f4/8M/MLvc7hKwICGiIeEW8hBgYZJb60yyzi2Ya5S3zdLrYqeR89XTye0526qvmyfKE2gVLyxLLY0pqpiilgkXiZUEuIhCwsOyyN3Z3fn/Mac4Guizw2Z3d9fX8w4f7+Xz2M+/Zmfnw3s/MzjAcxxEAAAAAoIcVOwAAAAAAd4MECwAAAIAyJFgAAAAAlCHBAgAAAKAMCRYAAAAAZUiwAAAAAChDggUAAABAGRIsAAAAAMqQYAEAAABQhgQLAAAAgDIkWAAAAACUIcECAAAAoAwJFgAAAABlSLAAAAAAKEOCBQAAAEAZEiwAAAAAypBgAQAAAFCGBAsAAACAMiRYAAAAAJRJxQ7gZlRfX3/06FHLkpCQkKlTp3b7xp07d+7du3f06NF/+tOfqESyePHitra2ESNGvPLKK0LhCy+8UFNTM3Xq1EWLFlFZiqvIycm5fPky/3+GYSIjIwcPHjxnzpzw8HBxA7su6jsD2A8Oeef0yiuvlJeXCy99fHwGDRr0yCOPxMfH965DjuO2bt168uRJf3//TZs2DRs2rKGhYevWrbNnz6YSsPUOs7Oz29vbn3/++bFjx3bb1fHjx9977z25XK7VamNjY6dPn/7YY495eHhQifNGehShpeLi4kOHDikUioSEhLlz5/r7+wtVlZWVR48eLS8vHzdu3OTJkwMDA6/bg43NKOPA4d5///1OW2HUqFG2vPHFF18khEydOpVWJGFhYYQQhmFOnjwpFA4bNowQ8tRTT9FaiquYMGFC1wMkIiLi6NGjYod2HdR3BrAfHPLOKSUlpesh7+XltX///t51+PHHH/OdhIWFcRwXERFBCNm5cydf+9JLL02YMOGtt97qdcCWHXbtLSgoiBDyxRdfdNvPm2++2XXFJ06caDAYeh2bLWyP0NLf/vY3hmGEOGUymVwu56u+++47Hx8foWrIkCGNjY1de7CxGXU4RSiCsrIyQsisWbMe/M3dd98tYjwcxz399NMcx4kYg/NIT0/fuXNnXl7eX/7yl379+jU0NCxcuNBgMIgdF7gwHPLO7I477ti5c+fOnTvXr1/fr18/vV7/hz/8oXddFRcXE0ImTZpUVVVFCPnXv/61e/fuSZMm8bWXLl0qKiqqrKzsdaiWHfa6N5VKxSfuS5Ys+fHHH6uqqrZs2eLp6VlYWPivf/2r17HZSVVV1erVqxmG2bBhQ15e3qBBg+rr6/kJXbPZPHfuXK1Wu3Tp0q+//jotLe3ixYvPPPNMpx5sbGYPOEUoggsXLnh4eHz22WdSafef//79+/Py8trb2++///5OVRqN5r333vv+++8VCkX//v3vu+++OXPmEELWrVt3/vz5sWPHCvvQn//854qKivvvv/9GM9WnT5/etm3b448/ft3aL774Ij8/v7a2dvjw4YsXL05MTCSE/OlPf7p69erDDz88ffp0s9n8+OOPG43GJ554YvLkyY2NjX/84x8JIevXr7/lllu2bdt26NCh5ubmgQMHzps378477ySEqNXqpUuXEkJeffXVHTt2FBUVJSQkLF++fMiQIdbXrts3XjdaQsj8+fP5j+LHH3/cv3+/8F2zk7i4uIceeoj//4MPPpiUlFRZWfn+++8vW7bsRv3r9frs7GxCSE5Ozvbt28+ePTts2LCXXnpJo9GsX7/+woULSUlJL7/8skwms75qQpCrV6/+5ptvCgoKvL29Fy5cOH369G53BnBmOOSJPQ/5GwVMbDvq4+PjhUNeq9X++c9/vnz5skqlCggIuO7by8rKtm7dev78+cDAwJSUlKefftrX15cQkpeXV1RURAhRKpXvvPPO888/v2/fvvb29ri4uKioqLy8vEuXLhFCzp49+8EHHyxYsEAIwMYPtn///kKHx44du1FvhJB3333366+/9vLyWr58+R133NFpfUtLSzs6Ovg+AwICCCFLliwpKyv77LPP+BOmwgfOL5QQsm3btm+//TY1NfWxxx6zsi1s2VI82/fYM2fOGI3GiRMnrly5khBSU1Pz4osv8t9YTpw40dDQ4O/v//bbb0skEl9f3zvuuGP//v1Go9HyQLOxmV04YJYMOhk0aNCtt9764YcfPvHEE6tXr/7pp59u1HLDhg2WU6MDBw4kv50vMJlMWVlZnbbmP/7xD47j1q9fTwgJCwszGo0cx7W1tfFn1n/44YdO/fPnC+69916WZfv166dUKrku5wueffZZvnOWZQkhfn5+BQUFHMc98cQThJCHH36Y47jS0lK+zcqVKzmO+/LLLwkh4eHhZrNZSB0Eb7zxBsdxjY2N/Mvk5GShKigo6OzZs9bX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" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "optimal_profits = profit(demand, optimal_supply, customer_price, newspaper_cost)\n", "\n", "plot_profit(demand, optimal_supply, optimal_profits)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## What if demand is uncertain?\n", "\n", "Optimizing over known demand is trivial - how would you set an optimal strategy when demand is unknown? \n", "\n", "We'll continue the example by randomly drawing from a demand model where demand $\\sim \\text{TruncatedNormal}(40, 10)$" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "using Random, Distributions" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# set seed for reproducibility\n", "Random.seed!(42)\n", "\n", "# Specify the truncated distribution with truncated(dist, lower=0)\n", "dist = truncated(Normal(40, 20), lower=0)\n", "# Randomly sample 1000\n", "sample_demand = rand(dist, 100)\n", "# Plot\n", "hist(sample_demand, \n", " figure=(resolution=(500,300),),\n", " axis=(title=L\"\\text{100 Random Samples from Truncated Normal}(40,20)\",))\n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "29.0" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "random_sample_supply = optimize_problem(sample_demand)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Here our optimization problem selected a daily supply strategy of 29 newspapers. We again show the results below:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyAAAAGQCAIAAADZR5NjAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdd2AUZfoH8GdrdtNJp4UEQoRAkN5EogSxi0EOT6MI5qQo56l3ynHCKYdgu9OzHh4awXKKigocR4QolhCULgFDSSChpbct2b7z++P98d7ebrLZDZNMsvl+/oDZKe8877yzs0/eaTJBEAgAAAAAxCOXOgAAAACAQIMECwAAAEBkSLAAAAAARIYECwAAAEBkSLAAAAAARIYECwAAAEBkSLAAAAAARIYECwAAAEBkSLAAAAAARIYECwAAAEBkSLAAAAAARIYECwAAAEBkSLAAAAAARIYECwAAAEBkSLAAAAAARIYECwAAAEBkSLAAAAAARIYECwAAAEBkSLAAAAAARKaUOoDA8fPPPxcXF8+ePVup/O9WLSsr+/bbb0tLS8eNG3fNNdeEh4f7MsmLjz76aPPmzSNHjvzjH/8oStgLFizQ6XTp6elPPvkkH/n444+fO3fu+uuvnz9/vihr6S5WrFhx6tQpNiyTyfr06ZOSkjJ79uzY2FhpA2uR6DsDXD4cBwLAk08+WVpayj9qtdpBgwbdfffdAwcObF+BgiCsW7duz549oaGhr7322rBhw6qqqtatW5eVlSVKwN4LzMnJMRqNf/jDH8aOHdtmUQUFBf/85z9LSkpMJlNSUtLNN9983333qVQqUeJsjV8Rujp+/HheXl5lZeWgQYNmzZoVHR3Nxh87dmzHjh21tbXDhw+/44471Gp1ayW07wvoKwHE0NDQMHjwYCLS6/V85HfffafVavmmvuKKK2pqatqc5N3SpUuJ6PrrrxcrcrZHymSyPXv28JHDhg0jooceekistXQXEyZM8PyOxMfHf/vtt1KH1gLRdwa4TDgOBIYxY8Z4HgeCgoL+85//tK/ADz/8kBUSHR0tCEJ8fDwRffTRR2zqsmXLJkyY8PLLL7c7YNcCPUuLiIggoi+++KLNcl566SXPik+ePNlqtbY7Nl/4HqGrt99+2zXzi4qK+u677wRB+Pvf/+76583YsWOrq6tbLKHdX0Af4RTh5dq0adPKlStHjhzJez4Yp9M5Z84ck8m0aNGibdu2XXXVVSdOnHjkkUe8T5KKIAi//e1vBUGQMIauY+rUqR999NG//vWvv/zlL3FxcVVVVfPmzbNarVLHBV0XjgOB59prr/3oo48++uijF198MS4uzmKx/O53v2tfUYcOHSKiKVOmlJeXE9Hbb7/96aefTpkyhU09efLkTz/9VFZW1u5QXQtsd2l6vZ4l7gsXLty3b195efnatWvVanVhYeHbb7/d7tg6SG1t7SOPPGKz2RYuXPjxxx9Pnjy5vr5+7ty5xcXFf/jDHxwOx/PPP//FF1+MGTNm//79zz//vGcJnfEFFDFZ65l4nyTD/3L9/vvviSg0NNRutwuCsGvXLiLq1auXzWbzMqnFVWzbti07O/v2229///333f5yNRqNL7/88qxZs6655pq77rrr008/ZeNXr16dnZ3t+kfMihUrsrOzP//8cy/xv/POO2yk51+un3/++bx586677rpHH320uLiYjVy6dGl2dva///1vQRAcDsd9992XnZ29a9cuQRCqq6uzs7Ozs7MvXrxotVrfeuut2bNnX3vttfPmzdu5cydbXK/Xs3lOnz791FNP3XDDDQ8//PDx48f5SlurXZsLthitIAhsqRMnTnzwwQd3332356ZmPVj33XcfH3PixAmFQkFEb775ppfCzWYzK/z48eN//OMfZ8yY8eijj1ZXV5eVlT300EOZmZm//e1vKyoq2qwaK6S4uPjvf//7LbfcMnv2bLZ5fdkZQEI4DnTB40BrAbd5HGA9WDk5OXzMX/7yF7ZxdDpdayX88ssvjz766PXXX/+rX/3queeeMxqNbPyHH3549dVXE1F6evqLL74oCMKCBQuys7P379/PpqanpxPR1VdfvWHDBtcwfNywrgW2WBrvH1q7du2tt946e/bsb775xrPWhYWFrnVkfve73/Xt2/f3v/8939psjYIg5ObmZmdnv/766222RZstxSP0fY/Ny8sjIq1WazKZBEE4fPgwC/7Pf/4zEY0bN47Ntn37dvYtczqdbiX4+wVsByRYl6uoqOjQoUO8B5gfWF999VUimjBhAvuo0+nYDCdPnvQyybP8V155RSaT8WPfgAED+IHV4XBkZma6Zcx/+9vfBEF48cUXiSg6OprtOjqdjnWl7t271618dmC9/fbb5XJ5XFxcU1OT4HFgfeyxx1jhcrmciEJCQvLz8wVB+M1vfkNEd911lyAIR48eZfM8/PDDgiB8+eWXRBQbG+t0OmfPnu0W5F//+ldBEGpqatjHUaNG8UkREREH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hS9V8+R9Z4CuCccBSY4DcXFx3gMmH44Ds2fP9n73HC+BVdC1gdiwVqt17QpqB182rFi2b9++YcOGiIiIt956S6FQDBs2bNiwYUOGDLnuuuv0ej3vlefnWJubmz0LabEtbDabl6luJfi+x5aUlMyYMePMmTMZGRkff/wxT6FGjx59+PDhpqam4ODg06dPL1++PCQkxPNZhl6+gN42kz/Qg9VRpk+fTkSnTp06duwYEW3atImI0tPT4+LivExatGjRl5esWbOG9VT//PPP7H6H8vLyLVu28FUUFBSwBVetWjV16lSWB3Dh4eG33HILEbHjkfc/WxmVSsUu73B9JAE7WX7+/PnrrrvuhhtumDJlyunTp0tKStgVneyc/YcffuhwOCZPnjxu3DiZTMa6x9mkTz75ZPr06c8999yKFSsOHjx4+PBhuVxutVoPHDjAV/HGG2+wP49eeeUVIho0aFBERIT32rW2INtirUXrF0EQSkpKsrOza2trNRrNgw8+6H1T+M6XqnnyvjNA14TjgCTHgYiICLG+rb4YOXKkTCarqqr65JNPiMjpdL7++utsvGsXnXes+8RNmxvWr9K8UyqVGzdu/Oc//+naTchuLYyNjU1MTGSn27755hsiqqysZJ1MblpsCx+nMj7usQ6HY+bMmWfOnGF7Bc+uvv7666SkpBEjRigUCpVKxRpizpw5rCE+//zzzz77jPU4evkC+rvpWiXWucYezvPaC0EQbrvtNiIKCwtLT09nJ4nefffdNie5Yff3BgUFTZw4kT9kll17sW7dOvZx6tSp/GRz//79+bLsCkEikslkZ86cabF8fu0FH3PzzTezpdi1F2azOTk5mYjGjx//m9/8ZujQoUQ0duxYdveK0+nkfxmcOHFCEAQ2AxGxJxbu37+fVXDs2LF33333yJEjiSgkJKSmpoafmJfL5SkpKfzPlPfee8977bws6D1aNtsPP/zQWju2+KBRvn28FM6vwWJXWbl9bGhocP3opWpuEbLHavPLML3sDNAV4DjQRY4D3gNu8zjgeRehG88S2B1/SqVy+vTp7No1IuIPKPZ+DRZ7UH6/fv1eeukltxW1uWE9C/QszW11rtdOubLZbBkZGazw1NTUa6+9ll+rwJ4uMXr0aPZxyJAhSqWSpSxu12C12Bbep3pG6Msey84eevrhhx/YvUEREREpKSlEFBwc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dmiChVOEAAAAACJDDxYAAACQwWBwOp1BQUFBQUFSxxIIkGABAAAAvfnmmyaTafz48TfeeKPUsQQCnCIEAAAAEBkSLAAAAACRIcECAAAAEBkSLAAAAACRIcECAAAAEBkSLAAAAACR4TENABCArFZrfX2965jg4ODw8HD+sbS09NSpU6NGjYqPj+/06AAg8LWnB8vpdB48ePDf//43eyGRm9LS0ry8vKqqqsuODQCgnb788sve/+uxxx5jkywWy8yZM1NSUrKyshISElasWCFtqAAQkPzuwSovL7/99tsPHz6sVqutVuvtt9/+8ccfs6e+WiyWOXPmbNmyRaPRmM3m5cuXr1q1qgNiBgBoQ0lJSf/+/d98800+JjExkQ2sXLly165dhYWFEyZM2LBhQ05OztixY2fOnClRpOKwWCzr168noilTpkgdCwAQtaMHa9GiRSaT6aeffjIYDJs3b96xY8dzzz3HJvHDltFozM3NXb169ebNm8UOGACgbSUlJVdeeeUtLkaMGEFEDodj/fr1CxcunDRpklwunz9//tSpU3Nzc6WO93I5nc7KysrKykqj0Sh1LABA1I4E64cffpg7d+748eNVKtVtt92WmZn5ww8/UOAetgCgOzp16lRqaupXX3312muvbdu2zWQysfHl5eUVFRWZmZl8zszMzMLCQonCBICA5fcpwtTU1CNHjrBhm812/Pjx6dOnUyuHrVdffVWsQAEAfFdSUnLw4MF33nmnT58+JSUliYmJW7duHTp0aGVlJRG5XtiekJBQV1dnt9uVyv8eD0+fPn369GnXAhsaGsLCwsxmc5urtlgsZrPZbrezj2az2eFwtLmUIAhE5HA4+CrYUoIg8KJsNpvbgNVqZfNbLBa3SXa7nZfpdDqJyOl0+lKmawmeRfHweJl8jGeZbFO0WF9/w7NYLDKZjFWZ191Llb1sRs+QvG89s9nMKuLXZuRN42OVvexaPlbZlxbx3tyX2cr+7oSeVfasYLtb2UuLuBblyzeaz+x6iPCF3wnWK6+8MmvWrBEjRkycOHH79u2RkZHLli0jIh8PW9u3b9++fbtrgfX19f369WtoaGhz1U1NTSqVyt8aQpfV2NioVCr59wG6PoPBwAZ0Op1arXabarFYWhzvhdls1mg0osXnUmxkZOScOXNeeuklhUJx5syZzMzMnJycwsLCxsZGIgoLC+Mzh4WFCYLQ0NAQGxvLRxYUFLz33nuuZYaFhaWkpOh0ujbXrtfrVSoVP3Dr9Xpfjlrs58dms/FVsJ8Bp9PJfmNcf5B4h5zBYGAbkP+2mc1m9vNjtVp5mexb5nA4WFFOp5PPz4tqbm52G8MHXMv0DK+iosJkMsnlch4eHzAYDK3V3WKx8PDYr6PdbvdSZb1ez0byndB1dZ5V5nF6VtmzEXmZrVVZr9frdDov4Xk2TXNzs9uKeJWtVqtnlb3sWj5WmbcyL0rEVuZjvLSy52b0t8qecfrYyrxML1U2Go1sftdU25dvNK9LhydYwcHBISEhdru9oqJCEISoqCh2PPXxsBUVFZWSkuJaYFFRkVwu9yVuhUKhVCqRYAUM5SVSBwK+UigUfMCz4RwOR4vjvZDLO+RRfBqNpri4mH9MTk5eunTpokWLGhoaoqOjiUiv1/OpTU1NMpksMjLStYS5c+fOnTvXdczTTz9NRHFxcW2u3eFwxMTElJeXs4+xsbEqlarNpdi21Wg0fBUsc1IoFMHBwUQkk8n4AZY/byIqKorNz39OwsLCWE9PcHAwL5P9IKlUKq1Wy8oMCQlxKyoiIsJtDF9daGgoaymtVsvDY/c2KZXK48eP7927V6vV8uvr+YLR0dFsg3sKCQnh4bHto1arvVQ5JiaGBc/q4hanZ5V5nJ5V9mxEvmPzMt2qbLfb4+LieJVZmXK5PDQ01K3KvITIyEi3FfEqa7Vadqmca5W97Fo+Vpm3Mi/Kl1ZurcpsJK8yH+NZZd7K/I8lXqa/VeZdLS3ujV5amZfppcq9evVi8/MerNDQUF++0bwuPs7J+ffbptPprr766ocffphd2G6xWG6//fZbbrll3759Ph62JkyYMGHCBNcx7LDlmpm1Rq/Xh4WF4fc4YLDeTV+aHroI9rtCRCEhIZ4Np1arHQ6HXw3qV3fX5UhOTiai2trahIQEutTjzlRWVvqYAwEA+M6/Px937txpMpkeeeQR9jEoKGjx4sX79++/ePEiDlsA0EXk5+f37t17//79fMyRI0c0Gs3AgQMTExOTk5Pz8/NdZ546daoUYQJAIPMvwWJdZLW1tXwMG9ZqtThsAUAXcfXVVyuVykWLFn3//fd6vX7Lli1r1qx55JFHFAqFTCZbsGDBW2+9VVBQYLfb161bt3v37sWLF0sdMgAEGv9Ot02ZMmXAgAELFiz45z//OXDgwD179vz5z3++6aabevXqRUQLFix45plnsrKyJk6c+O677+7evds13wIA6BxBQUFbtmzJzs7OyMggIrlc/vDDD7OrEYjoiSeeKCsry8jIUCgUcrn8jTfemDZtmpThAkAg8i/BCg0N3bp16/3335+ens7GzJo166233mLDOGwBQBcxatSoo0ePlpSU6PX6IezwytUAACAASURBVEOGuF6gKpfL165d+8ILL5SWlqalpbHLeAEAxOX3BePp6en79u07f/58RUXFwIEDXe8QwWELALoOuVyempra2tTw8PBRo0Z1ZjwA0KO08468fv369evXr8VJOGwBAABAD9chD6EBAAAA6MmQYAEAAACIDA/tBPCPxWIpLS0lov79++MpqQAA0CL0YAH4p6mp6dNPP/30008vXLggdSwAANBFIcECAAAAEBkSLAAAAACR4RosAAAA6GzHjh07ceKEUqm87bbbpI6lQ6AHC0B6TU1NO3bs2LFjR11dndSxAAB0hoqKiqKioqNHj0odSEdBDxaA9AwGw549e4goJSXF9e0IAN2awWA4cuQIEY0cOZK9shag50CCBQAAHUKv13///fdENGDAACRY0BqLxdLc3ExEgiB03FoEQaivryeiTnuPHxIsAAAAkMzPP/+8fft2Ipo1a1bHrUWn0+Xm5hJRVlZWx63FFa7BAgAAABAZEiwAAAAAkSHBAgAAABAZEiwAAAAAkSHBAgAAABAZEiwAAAAAkSHBAgAAABAZEiwAAAAAkeFBowAAknn99dcFQZgwYYLUgQCAyJBgAQBIhr3em70nBAACCU4RAgAAAIgMCRYAAACAyHCKEAAAepATJ0588803RDR37tyQkBCpw4GAhQQLAAB6EJPJVF1dTUQOh0PqWCCQ4RQhAAAAgMiQYAEAAACIDAkWAAAAgMhwDRa0h9PpPHjwIBH1798/Pj5e6nAAupPm5ubPPvuMiK666iqpYwGAjoIEC9rD4XBs27aNiGbMmIEEC8Avdrv9zJkzRJSeni51LADQUXp0grV58+Zjx47FxsY+8MADUscCAAAAgaNHX4Nlt9ttNpvVapU6EAAAAAgoPTrBAgAAAOgIPfoUIUBrTCaTyWQioqioKKljAQCA7gcJFkAL9u3bt2vXLiJ66qmnpI4FAAC6H5wiBAAAABAZEiwAAAAAkeEUYXeyZcuW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" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "optimal_profits = profit(sample_demand, random_sample_supply, customer_price, newspaper_cost)\n", "\n", "plot_profit(sample_demand, random_sample_supply, optimal_profits, bar_labels=false)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Bayesian Statistics\n", "\n", "How could we improve upon our assumption that demand is drawn from a $\\text{TruncatedNormal}(40,20)$ distribution? If we had a few days of data we could improve upon our inventory strategy using Bayesian stats. \n", "\n", "Here we'll use `Turing`:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "┌ Info: [Turing]: progress logging is disabled globally\n", "└ @ Turing /Users/nelsontang/.julia/packages/Turing/FlV8f/src/Turing.jl:23\n", "┌ Info: [AdvancedVI]: global PROGRESS is set as false\n", "└ @ AdvancedVI /Users/nelsontang/.julia/packages/AdvancedVI/hVQ2g/src/AdvancedVI.jl:15\n" ] } ], "source": [ "# Disable progress bars and such\n", "using Turing; Turing.setprogress!(false);" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "We'll need to first specify our priors here. Before, we assumed the distribution had a mean $\\mu=40$ and standard deviation $\\sigma=20$, but with uncertain demand we don't know these parameters for certain. We'll need to specify distributions for these parameters and then sample from the posterior distribution after we get some data." ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Let's say we get 5 days of observed data $d$ with an empirical mean of $\\bar{d}$. We have priors as such:\n", "\n", "$$\n", "\\begin{aligned}\n", "\\sigma & \\sim \\text{HalfStudentT}(\\mu=10, \\nu=20) \\\\\n", "\\mu & \\sim \\mathcal{N}(\\bar{d}, 20) \\\\\n", "\\text{Demand} & \\sim \\text{TruncatedNormal}(\\mu, \\sigma, 0)\\\\\n", "\\end{aligned}\n", "$$" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "demand_seen = sample_demand[1:5]\n", "demand_unseen = sample_demand[6:15];" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "newspaper (generic function with 2 methods)" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "@model function newspaper(demand)\n", " σ ~ Truncated(TDist(20), 10, 100)\n", " μ ~ Normal(mean(demand_seen), 20)\n", " for i in 1:length(demand)\n", " demand[i] ~ Truncated(Normal(μ, σ), 0, 100)\n", " end\n", " return demand\n", "end" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "┌ Info: Found initial step size\n", "│ ϵ = 1.6\n", "└ @ Turing.Inference /Users/nelsontang/.julia/packages/Turing/FlV8f/src/inference/hmc.jl:190\n", "┌ Warning: The current proposal will be rejected due to numerical error(s).\n", "│ isfinite.((θ, r, ℓπ, ℓκ)) = (true, false, false, false)\n", "└ @ AdvancedHMC /Users/nelsontang/.julia/packages/AdvancedHMC/iWHPQ/src/hamiltonian.jl:47\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "┌ Warning: The current proposal will be rejected due to numerical error(s).\n", "│ isfinite.((θ, r, ℓπ, ℓκ)) = (true, false, false, false)\n", "└ @ AdvancedHMC /Users/nelsontang/.julia/packages/AdvancedHMC/iWHPQ/src/hamiltonian.jl:47\n", "┌ Warning: The current proposal will be rejected due to numerical error(s).\n", "│ isfinite.((θ, r, ℓπ, ℓκ)) = (true, false, false, false)\n", "└ @ AdvancedHMC /Users/nelsontang/.julia/packages/AdvancedHMC/iWHPQ/src/hamiltonian.jl:47\n", "┌ Warning: The current proposal will be rejected due to numerical error(s).\n", "│ isfinite.((θ, r, ℓπ, ℓκ)) = (true, false, false, false)\n", "└ @ AdvancedHMC /Users/nelsontang/.julia/packages/AdvancedHMC/iWHPQ/src/hamiltonian.jl:47\n", "┌ Warning: The current proposal will be rejected due to numerical error(s).\n", "│ isfinite.((θ, r, ℓπ, ℓκ)) = (true, false, false, false)\n", "└ @ AdvancedHMC /Users/nelsontang/.julia/packages/AdvancedHMC/iWHPQ/src/hamiltonian.jl:47\n", "┌ Warning: The current proposal will be rejected due to numerical error(s).\n", "│ isfinite.((θ, r, ℓπ, ℓκ)) = (true, false, false, false)\n", "└ @ AdvancedHMC /Users/nelsontang/.julia/packages/AdvancedHMC/iWHPQ/src/hamiltonian.jl:47\n", "┌ Warning: The current proposal will be rejected due to numerical error(s).\n", "│ isfinite.((θ, r, ℓπ, ℓκ)) = (true, false, false, false)\n", "└ @ AdvancedHMC /Users/nelsontang/.julia/packages/AdvancedHMC/iWHPQ/src/hamiltonian.jl:47\n", "┌ Warning: The current proposal will be rejected due to numerical error(s).\n", "│ isfinite.((θ, r, ℓπ, ℓκ)) = (true, false, false, false)\n", "└ @ AdvancedHMC /Users/nelsontang/.julia/packages/AdvancedHMC/iWHPQ/src/hamiltonian.jl:47\n", "┌ Warning: The current proposal will be rejected due to numerical error(s).\n", "│ isfinite.((θ, r, ℓπ, ℓκ)) = (true, false, false, false)\n", "└ @ AdvancedHMC /Users/nelsontang/.julia/packages/AdvancedHMC/iWHPQ/src/hamiltonian.jl:47\n", "┌ Warning: The current proposal will be rejected due to numerical error(s).\n", "│ isfinite.((θ, r, ℓπ, ℓκ)) = (true, false, false, false)\n", "└ @ AdvancedHMC /Users/nelsontang/.julia/packages/AdvancedHMC/iWHPQ/src/hamiltonian.jl:47\n", "┌ Warning: The current proposal will be rejected due to numerical error(s).\n", "│ isfinite.((θ, r, ℓπ, ℓκ)) = (true, false, false, false)\n", "└ @ AdvancedHMC /Users/nelsontang/.julia/packages/AdvancedHMC/iWHPQ/src/hamiltonian.jl:47\n", "┌ Warning: The current proposal will be rejected due to numerical error(s).\n", "│ isfinite.((θ, r, ℓπ, ℓκ)) = (true, false, false, false)\n", "└ @ AdvancedHMC /Users/nelsontang/.julia/packages/AdvancedHMC/iWHPQ/src/hamiltonian.jl:47\n", "┌ Warning: The current proposal will be rejected due to numerical error(s).\n", "│ isfinite.((θ, r, ℓπ, ℓκ)) = (true, false, false, false)\n", "└ @ AdvancedHMC /Users/nelsontang/.julia/packages/AdvancedHMC/iWHPQ/src/hamiltonian.jl:47\n", "┌ Warning: The current proposal will be rejected due to numerical error(s).\n", "│ isfinite.((θ, r, ℓπ, ℓκ)) = (true, false, false, false)\n", "└ @ AdvancedHMC /Users/nelsontang/.julia/packages/AdvancedHMC/iWHPQ/src/hamiltonian.jl:47\n", "┌ Warning: The current proposal will be rejected due to numerical error(s).\n", "│ isfinite.((θ, r, ℓπ, ℓκ)) = (true, false, false, false)\n", "└ @ AdvancedHMC /Users/nelsontang/.julia/packages/AdvancedHMC/iWHPQ/src/hamiltonian.jl:47\n", "┌ Warning: The current proposal will be rejected due to numerical error(s).\n", "│ isfinite.((θ, r, ℓπ, ℓκ)) = (true, false, false, false)\n", "└ @ AdvancedHMC /Users/nelsontang/.julia/packages/AdvancedHMC/iWHPQ/src/hamiltonian.jl:47\n", "┌ Warning: The current proposal will be rejected due to numerical error(s).\n", "│ isfinite.((θ, r, ℓπ, ℓκ)) = (true, false, false, false)\n", "└ @ AdvancedHMC /Users/nelsontang/.julia/packages/AdvancedHMC/iWHPQ/src/hamiltonian.jl:47\n", "┌ Warning: The current proposal will be rejected due to numerical error(s).\n", "│ isfinite.((θ, r, ℓπ, ℓκ)) = (true, false, false, false)\n", "└ @ AdvancedHMC /Users/nelsontang/.julia/packages/AdvancedHMC/iWHPQ/src/hamiltonian.jl:47\n", "┌ Warning: The current proposal will be rejected due to numerical error(s).\n", "│ isfinite.((θ, r, ℓπ, ℓκ)) = (true, false, false, false)\n", "└ @ AdvancedHMC /Users/nelsontang/.julia/packages/AdvancedHMC/iWHPQ/src/hamiltonian.jl:47\n", "┌ Warning: The current proposal will be rejected due to numerical error(s).\n", "│ isfinite.((θ, r, ℓπ, ℓκ)) = (true, false, false, false)\n", "└ @ AdvancedHMC /Users/nelsontang/.julia/packages/AdvancedHMC/iWHPQ/src/hamiltonian.jl:47\n", "┌ Warning: The current proposal will be rejected due to numerical error(s).\n", "│ isfinite.((θ, r, ℓπ, ℓκ)) = (true, false, false, false)\n", "└ @ AdvancedHMC /Users/nelsontang/.julia/packages/AdvancedHMC/iWHPQ/src/hamiltonian.jl:47\n", "┌ Warning: The current proposal will be rejected due to numerical error(s).\n", "│ isfinite.((θ, r, ℓπ, ℓκ)) = (true, false, false, false)\n", "└ @ AdvancedHMC /Users/nelsontang/.julia/packages/AdvancedHMC/iWHPQ/src/hamiltonian.jl:47\n", "┌ Warning: The current proposal will be rejected due to numerical error(s).\n", "│ isfinite.((θ, r, ℓπ, ℓκ)) = (true, false, false, false)\n", "└ @ AdvancedHMC /Users/nelsontang/.julia/packages/AdvancedHMC/iWHPQ/src/hamiltonian.jl:47\n", "┌ Warning: The current proposal will be rejected due to numerical error(s).\n", "│ isfinite.((θ, r, ℓπ, ℓκ)) = (true, false, false, false)\n", "└ @ AdvancedHMC /Users/nelsontang/.julia/packages/AdvancedHMC/iWHPQ/src/hamiltonian.jl:47\n" ] }, { "data": { "text/plain": [ "Chains MCMC chain (1000×14×1 Array{Float64, 3}):\n", "\n", "Iterations = 501:1:1500\n", "Number of chains = 1\n", "Samples per chain = 1000\n", "Wall duration = 7.06 seconds\n", "Compute duration = 7.06 seconds\n", "parameters = σ, μ\n", "internals = lp, n_steps, is_accept, acceptance_rate, log_density, hamiltonian_energy, hamiltonian_energy_error, max_hamiltonian_energy_error, tree_depth, numerical_error, step_size, nom_step_size\n", "\n", "Summary Statistics\n", " \u001b[1m parameters \u001b[0m \u001b[1m mean \u001b[0m \u001b[1m std \u001b[0m \u001b[1m naive_se \u001b[0m \u001b[1m mcse \u001b[0m \u001b[1m ess \u001b[0m \u001b[1m rhat \u001b[0m \u001b[1m e\u001b[0m ⋯\n", " \u001b[90m Symbol \u001b[0m \u001b[90m Float64 \u001b[0m \u001b[90m Float64 \u001b[0m \u001b[90m Float64 \u001b[0m \u001b[90m Float64 \u001b[0m \u001b[90m Float64 \u001b[0m \u001b[90m Float64 \u001b[0m \u001b[90m \u001b[0m ⋯\n", "\n", " σ 10.7138 0.7466 0.0236 0.0283 741.2224 1.0009 ⋯\n", " μ 30.0993 4.7900 0.1515 0.1848 729.7710 1.0012 ⋯\n", "\u001b[36m 1 column omitted\u001b[0m\n", "\n", "Quantiles\n", " \u001b[1m parameters \u001b[0m \u001b[1m 2.5% \u001b[0m \u001b[1m 25.0% \u001b[0m \u001b[1m 50.0% \u001b[0m \u001b[1m 75.0% \u001b[0m \u001b[1m 97.5% \u001b[0m\n", " \u001b[90m Symbol \u001b[0m \u001b[90m Float64 \u001b[0m \u001b[90m Float64 \u001b[0m \u001b[90m Float64 \u001b[0m \u001b[90m Float64 \u001b[0m \u001b[90m Float64 \u001b[0m\n", "\n", " σ 10.0100 10.1814 10.4606 10.9982 12.8911\n", " μ 19.8593 26.9420 30.2833 33.3436 39.1081\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "idata = sample(newspaper(demand_seen), NUTS(), 1000; progress=false)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Chains{Float64, AxisArrays.AxisArray{Float64, 3, Array{Float64, 3}, Tuple{AxisArrays.Axis{:iter, StepRange{Int64, Int64}}, AxisArrays.Axis{:var, Vector{Symbol}}, AxisArrays.Axis{:chain, UnitRange{Int64}}}}, Missing, NamedTuple{(:parameters, :internals), Tuple{Vector{Symbol}, Vector{Symbol}}}, NamedTuple{(:start_time, :stop_time), Tuple{Float64, Float64}}}" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "typeof(idata)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "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TZvqv5KSkpItW7bU3R0SanLw4MEqE+UD1B7megR9NHPmzCNHjqxduzY4ONjMzCw5OfnChQuNc2IDADUg2UHvUBR14sSJwMDARYsW0S2WlpadOnWqslhcXFxSUpK5ubmnp2fluTnLyspycnJcXFwqKiru3btnYGDQo0cPgUBACMnKynry5Imzs3Pbtm1VyxcWFhYVFbm6uubm5kZFRVlaWnbt2pXH472nwqKioujoaKlU2qlTp6ZNm9a0TEFBQfPmzSsPVVpampub6+zsbGBgQC/z4sWLsrKyli1btmzZsqbZIumh3NzcKrcUFha6urpWXuzly5eJiYlNmjTp3LmzoaHhe+oH9qujWQsA1KZQKIyNjUeMGFHTAsnJyc7OzoQQU1NTDocjEAhCQ0NVrx49epQQsnfvXisrKzpV27Rpk52dvWHDBoFAwOVyCSETJkxQKpX08itXrjQyMvrtt98EAoGxsTEhpH379ikpKfSrSUlJhJBjx47RT5VK5ffff29oaMjj8eh/Fy1apBqqsmvXrhFCzp8/X7lx2rRpVlZWFRUVFEV98803fD6fx+PRK/X29k5OTlYt6eXlNXHiRPrx2rVruVxu5XFWr14tEAhUT+nJcgkh9FDOzs63b9/+4HYGFsNxdtA7XC7X39//3LlzU6dO/eeff0pKSqosIBAIVq5cmZubW1ZWVlZWtnjx4pUrV169erXyMj/88MOff/4plUojIyMTEhLo+5PFxsZKJJKffvrp8OHDly5dUi0slUp/+eWXx48fi8Xi27dvZ2dnjxs3rtraNm/evGrVqo0bN4pEorKysrCwsI0bN+7Zs+fdJfv27evm5nbgwAFVS0VFRURExLhx4+gdal9f36ioqPLycrFYfO/evby8vBkzZqixuaRS6dChQ/Pz8x8+fCgWi7Ozs9u1axcYGFhUVKTGaMASuv7VAlCNrKysTz/9lN6/5nK53bt337VrV7W7xjQ3N7dFixbRj1X77KpXP/74Y0LImzdv6KdyudzCwmLJkiX005UrVxJCTp48qVp+69athJCnT59S//8+u1wut7W1/fzzzyuveuTIkT169Ki2qpUrVxoYGOTl5dFPjx07RgiJioqqduHt27cbGBjI5XL6ae332Y8fP04IqXyD1qysLC6Xe+DAgWpXBI0BjrODPrK3tz916lRWVtbly5fv3r179uzZadOm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", "image/svg+xml": "\n\n", "text/html": [ "\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import Plots\n", "Plots.histogram(idata)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "image/png": "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" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# You can also access the data like so:\n", "samples = idata[:μ].data\n", "hist(samples[1:end], figure=(resolution=(400,200),),)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "14-element Vector{Symbol}:\n", " :σ\n", " :μ\n", " :lp\n", " :n_steps\n", " :is_accept\n", " :acceptance_rate\n", " :log_density\n", " :hamiltonian_energy\n", " :hamiltonian_energy_error\n", " :max_hamiltonian_energy_error\n", " :tree_depth\n", " :numerical_error\n", " :step_size\n", " :nom_step_size" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "keys(idata)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2-element Vector{ChainDataFrame}:\n", " Summary Statistics (2 x 8)\n", " Quantiles (2 x 6)" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "describe(idata)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Another way of inspecting the output is to convert it to a `DataFrame`:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Row | iteration | chain | σ | μ | lp | n_steps | is_accept | acceptance_rate | log_density | hamiltonian_energy | hamiltonian_energy_error | max_hamiltonian_energy_error | tree_depth | numerical_error | step_size | nom_step_size |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Int64 | Int64 | Float64 | Float64 | Float64 | Float64 | Float64 | Float64 | Float64 | Float64 | Float64 | Float64 | Float64 | Float64 | Float64 | Float64 | |
1 | 501 | 1 | 11.2875 | 29.3936 | -25.2256 | 3.0 | 1.0 | 1.87558e-6 | -25.2256 | 31.6603 | 0.0 | 30.1024 | 2.0 | 0.0 | 1.11051 | 1.11051 |
2 | 502 | 1 | 12.8347 | 34.7469 | -27.0374 | 3.0 | 1.0 | 0.398906 | -27.0374 | 27.5185 | 1.02739 | 1.40166 | 2.0 | 0.0 | 1.11051 | 1.11051 |
3 | 503 | 1 | 10.6082 | 23.9739 | -25.8737 | 3.0 | 1.0 | 0.964192 | -25.8737 | 27.9632 | -0.696942 | -0.696942 | 2.0 | 0.0 | 1.11051 | 1.11051 |
4 | 504 | 1 | 10.3797 | 33.5923 | -25.3461 | 3.0 | 1.0 | 0.912656 | -25.3461 | 26.5635 | -0.224364 | 0.303854 | 2.0 | 0.0 | 1.11051 | 1.11051 |
5 | 505 | 1 | 10.3797 | 33.5923 | -25.3461 | 3.0 | 1.0 | 0.590583 | -25.3461 | 27.0681 | 0.0 | 0.748131 | 2.0 | 0.0 | 1.11051 | 1.11051 |
6 | 506 | 1 | 11.1618 | 27.5725 | -25.2787 | 3.0 | 1.0 | 1.0 | -25.2787 | 25.4022 | -0.0195941 | -0.0810465 | 2.0 | 0.0 | 1.11051 | 1.11051 |
7 | 507 | 1 | 10.3686 | 32.9134 | -25.2642 | 3.0 | 1.0 | 1.0 | -25.2642 | 25.3413 | -0.00163741 | -0.0819738 | 2.0 | 0.0 | 1.11051 | 1.11051 |
8 | 508 | 1 | 10.9088 | 23.5613 | -25.973 | 3.0 | 1.0 | 0.743265 | -25.973 | 26.9938 | 0.276306 | 0.588385 | 1.0 | 0.0 | 1.11051 | 1.11051 |
9 | 509 | 1 | 10.3761 | 23.5702 | -26.1859 | 3.0 | 1.0 | 0.917502 | -26.1859 | 26.6893 | 0.141407 | -0.184401 | 2.0 | 0.0 | 1.11051 | 1.11051 |
10 | 510 | 1 | 10.2422 | 34.1285 | -25.6943 | 3.0 | 1.0 | 0.890245 | -25.6943 | 27.0689 | -0.249144 | 0.292641 | 2.0 | 0.0 | 1.11051 | 1.11051 |