ipynb • Lines: 1112{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "EAt-K2qgcIou"
},
"source": [
"# Optimizing Functions of One Variable: Cost Minimization"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "FZYK-0rin5x7"
},
"source": [
"In this assignment you will solve a simple optimization problem for a function of one variable. Given a dataset of historical prices of a product from two suppliers, your task is to identify what share of the product you should buy from each of the suppliers to make the best possible investment in the future. Stating the problem mathematically, you will construct a target function to minimize, evaluate its minimum and investigate how its derivative is connected with the result."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Table of Contents\n",
"\n",
"- [ 1 - Statement of the Optimization Problem](#1)\n",
" - [ 1.1 - Description of the Problem](#1.1)\n",
" - [ 1.2 - Mathematical Statement of the Problem](#1.2)\n",
" - [ 1.3 - Solution Approach](#1.3)\n",
"- [ 2 - Optimizing Function of One Variable in Python](#2)\n",
" - [ 2.1 - Packages](#2.1)\n",
" - [ 2.2 - Open and Analyze the Dataset](#2.2)\n",
" - [ Exercise 1](#ex01)\n",
" - [ 2.3 - Construct the Function $\\mathcal{L}$ to Optimize and Find its Minimum Point](#2.3)\n",
" - [ Exercise 2](#ex02)\n",
" - [ Exercise 3](#ex03)\n",
" - [ Exercise 4](#ex04)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a name='1'></a>\n",
"## 1 - Statement of the Optimization Problem"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a name='1.1'></a>\n",
"### 1.1 - Description of the Problem"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Your Company is aiming to minimize production costs of some goods. During the production process, an essential product P is used, which can be supplied from one of two partners - supplier A and supplier B. Your consultants requested the historical prices of product P from both suppliers A and B, which were provided as monthly averages for the period from February 2018 to March 2020.\n",
"\n",
"Preparing Company Budget for the coming twelve months period, your plan is to purchase the same amount of product P monthly. Choosing the supplier, you noticed, that there were some periods in the past, when it would be more profitable to use supplier A (the prices of product P were lower), and other periods to work with supplier B. For the Budget model you can set some percentage of the goods to be purchased from supplier A (e.g. 60%) and the remaining part from supplier B (e.g. 40%), but this split should be kept consistent for the whole of the twelve months period. The Budget will be used in preparation for the contract negotiations with both suppliers.\n",
"\n",
"Based on the historical prices, is there a particular percentage which will be more profitable to supply from Company A, and the remaining part from Company B? Or maybe it does not matter and you can work just with one of the suppliers?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a name='1.2'></a>\n",
"### 1.2 - Mathematical Statement of the Problem"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Denoting prices of the product P from Company A and Company B as $p_A$ (USD) and $p_B$ (USD) respectively, and the volume of the product to be supplied per month as $n$ (units), the total cost in USD is:\n",
"\n",
"$$f\\left(\\omega\\right) = p_A \\omega \\,n+ p_B \\left(1 - \\omega\\right) n,$$\n",
"\n",
"where $0\\leq\\omega\\leq1$ is the parameter. If $\\omega = 1$, all goods will be supplied from Company A, and if $\\omega = 0$, from Company B. In case of $0<\\omega<1$, some percentage will be allocated to both. \n",
"\n",
"As it is planned to keep the volume $n$ constant over the next twelve months, in the mathematical model the common approach is to put $n = 1$. You can do this, because nothing depends on the volume and the end result will be the same. Now the total cost will be simpler:\n",
"\n",
"$$f\\left(\\omega\\right) = p_A \\omega+ p_B \\left(1 - \\omega\\right) \\tag{1}$$\n",
"\n",
"Obviously, you do not know the future prices $p_A$ and $p_B$, only historical values (prices $\\{p_A^1, \\cdots, p_A^k\\}$ and $\\{p_B^1, \\cdots, p_B^k\\}$ for $k$ months). And historically there were various periods of time when it was better to take $\\omega = 1$ ($p_A^i < p_B^i$) or $\\omega = 0$ ($p_A^i >p_B^i$). Is it possible now to choose some $\\omega$ value that would provide some evidence of minimum costs in the future?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a name='1.3'></a>\n",
"### 1.3 - Solution Approach"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This is a standard **portfolio management** (investment) problem well known in statistics, where based on the historical prices you need to make investment decision to maximize profit (minimize costs). Since statistics has not been covered in this Course, you do not need to understand the details about the function $\\mathcal{L}\\left(\\omega\\right)$ (called **loss function**) to minimize, explained in the next paragraph.\n",
"\n",
"The approach is to calculate $f\\left(\\omega\\right)$ for each of the historical prices $p_A^i$ and $p_B^i$, $f^i\\left(\\omega\\right)=p_A^i \\omega+ p_B^i \\left(1 - \\omega\\right)$. Then take an average of those values, $\\overline{f\\left (\\omega\\right)}=\\text{mean}\\left(f^i\\left(\\omega\\right)\\right) = \\frac{1}{k}\\sum_{i=1}^{k}f^i\\left(\\omega\\right)$ and look for such value of $\\omega$ which makes $f^i\\left(\\omega\\right)$ as \"stable\" as possible - varying as little as possible from the average $\\overline{f\\left (\\omega\\right)}$. This means that you would want to minimize the sum of the differences $\\left(f^i \\left(\\omega\\right) - \\overline{f\\left (\\omega\\right)}\\right)$. As the differences can be negative or positive, a common approach is to take the squares of those and take an average of the squares:\n",
"\n",
"$$\\mathcal{L}\\left(\\omega\\right) = \\frac{1}{k}\\sum_{i=1}^{k}\\left(f^i \\left(\\omega\\right) - \\overline{f\\left (\\omega\\right)}\\right)^2\\tag{2}$$\n",
"\n",
"In statistics $\\mathcal{L}\\left(\\omega\\right)$ is called a variance of $\\{f^1 \\left(\\omega\\right), \\cdots , f^k \\left(\\omega\\right)\\}$. The aim is to minimize the variance $\\mathcal{L}\\left(\\omega\\right)$, where $\\omega\\in\\left[0, 1\\right]$. Again, do not worry if you do not understand deeply why particularly this function $\\mathcal{L}\\left(\\omega\\right)$ was chosen. You might think if it is logical to minimize an average $\\overline{f\\left (\\omega\\right)}$, but [risk management](https://www.thebalancemoney.com/minimum-variance-portfolio-overview-4155796#:~:text=A%20minimum%20variance%20portfolio%20is,other%20out%20when%20held%20together.) theory states that in this problem variance needs to be optimized.\n",
"\n",
"Statistical theory shows that there is an $\\omega\\in\\left[0, 1\\right]$ value which minimizes function $\\mathcal{L}\\left(\\omega\\right)$ and it can be found using some properties of the datasets $\\{p_A^1, \\cdots, p_A^k\\}$ and $\\{p_B^1, \\cdots, p_B^k\\}$. However, as this is not a Course about statistics, the example is taken to illustrate an optimization problem of one variable based on some dataset. It is a chance for you to check your understanding and practice this week material. \n",
"\n",
"Now let's upload a dataset and explore if it is possible to find a minimum point for the corresponding function $\\mathcal{L}\\left(\\omega\\right)$."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a name='2'></a>\n",
"## 2 - Optimizing Function of One Variable in Python"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a name='2.1'></a>\n",
"### 2.1 - Packages"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's import all of the required packages. In addition to the ones you have been using in this Course before, you will need to import `pandas` library. It is a commonly used package for data manipulation and analysis. "
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"tags": [
"graded"
]
},
"outputs": [],
"source": [
"# A function to perform automatic differentiation.\n",
"from jax import grad\n",
"# A wrapped version of NumPy to use JAX primitives.\n",
"import jax.numpy as np\n",
"# A library for programmatic plot generation.\n",
"import matplotlib.pyplot as plt\n",
"# A library for data manipulation and analysis.\n",
"import pandas as pd\n",
"\n",
"# A magic command to make output of plotting commands displayed inline within the Jupyter notebook.\n",
"%matplotlib inline "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Load the unit tests defined for this notebook."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"WARNING:jax._src.lib.xla_bridge:No GPU/TPU found, falling back to CPU. (Set TF_CPP_MIN_LOG_LEVEL=0 and rerun for more info.)\n"
]
}
],
"source": [
"import w1_unittest\n",
"\n",
"# Please ignore the warning message about GPU/TPU if it appears."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a name='2.2'></a>\n",
"### 2.2 - Open and Analyze the Dataset"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Historical prices for both suppliers A and B are saved in the file `data/prices.csv`. To open it you can use `pandas` function `read_csv`. This example is very simple, there is no need to use any other parameters."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"tags": [
"graded"
]
},
"outputs": [],
"source": [
"df = pd.read_csv('data/prices.csv')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The data is now saved in the variable `df` as a **DataFrame**, which is the most commonly used `pandas` object. It is a 2-dimensional labeled data structure with columns of potentially different types. You can think of it as a table or a spreadsheet. Full documentation can be found [here](https://pandas.pydata.org/).\n",
"\n",
"View the data with a standard `print` function:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"tags": [
"graded"
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" date price_supplier_a_dollars_per_item \\\n",
"0 1/02/2016 104 \n",
"1 1/03/2016 108 \n",
"2 1/04/2016 101 \n",
"3 1/05/2016 104 \n",
"4 1/06/2016 102 \n",
"5 1/07/2016 105 \n",
"6 1/08/2016 114 \n",
"7 1/09/2016 102 \n",
"8 1/10/2016 105 \n",
"9 1/11/2016 101 \n",
"10 1/12/2016 109 \n",
"11 1/01/2017 103 \n",
"12 1/02/2017 93 \n",
"13 1/03/2017 98 \n",
"14 1/04/2017 92 \n",
"15 1/05/2017 97 \n",
"16 1/06/2017 96 \n",
"17 1/07/2017 94 \n",
"18 1/08/2017 97 \n",
"19 1/09/2017 93 \n",
"20 1/10/2017 99 \n",
"21 1/11/2017 93 \n",
"22 1/12/2017 98 \n",
"23 1/01/2018 94 \n",
"24 1/02/2018 93 \n",
"25 1/03/2018 92 \n",
"26 1/04/2018 96 \n",
"27 1/05/2018 98 \n",
"28 1/06/2018 98 \n",
"29 1/07/2018 93 \n",
"30 1/08/2018 97 \n",
"31 1/09/2018 102 \n",
"32 1/10/2018 103 \n",
"33 1/11/2018 100 \n",
"34 1/12/2018 100 \n",
"35 1/01/2019 104 \n",
"36 1/02/2019 100 \n",
"37 1/03/2019 103 \n",
"38 1/04/2019 104 \n",
"39 1/05/2019 101 \n",
"40 1/06/2019 102 \n",
"41 1/07/2019 100 \n",
"42 1/08/2019 102 \n",
"43 1/09/2019 108 \n",
"44 1/10/2019 107 \n",
"45 1/11/2019 107 \n",
"46 1/12/2019 103 \n",
"47 1/01/2020 109 \n",
"48 1/02/2020 108 \n",
"49 1/03/2020 108 \n",
"\n",
" price_supplier_b_dollars_per_item \n",
"0 76 \n",
"1 76 \n",
"2 84 \n",
"3 79 \n",
"4 81 \n",
"5 84 \n",
"6 90 \n",
"7 93 \n",
"8 93 \n",
"9 99 \n",
"10 98 \n",
"11 96 \n",
"12 94 \n",
"13 104 \n",
"14 101 \n",
"15 102 \n",
"16 104 \n",
"17 106 \n",
"18 105 \n",
"19 103 \n",
"20 106 \n",
"21 104 \n",
"22 113 \n",
"23 115 \n",
"24 114 \n",
"25 124 \n",
"26 119 \n",
"27 115 \n",
"28 112 \n",
"29 111 \n",
"30 106 \n",
"31 107 \n",
"32 108 \n",
"33 108 \n",
"34 102 \n",
"35 104 \n",
"36 101 \n",
"37 101 \n",
"38 100 \n",
"39 103 \n",
"40 106 \n",
"41 100 \n",
"42 97 \n",
"43 98 \n",
"44 90 \n",
"45 92 \n",
"46 92 \n",
"47 99 \n",
"48 94 \n",
"49 91 \n"
]
}
],
"source": [
"print(df)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To print a list of the column names use `columns` attribute of the DataFrame:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"tags": [
"graded"
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Index(['date', 'price_supplier_a_dollars_per_item',\n",
" 'price_supplier_b_dollars_per_item'],\n",
" dtype='object')\n"
]
}
],
"source": [
"print(df.columns)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Reviewing the displayed table and the column names you can conclude that monthly prices are provided (in USD) and you only need the data from the columns `price_supplier_a_dollars_per_item` and `price_supplier_b_dollars_per_item`. In real life the datasets are significantly larger and require a proper review and cleaning before injection into models. But this is not the focus of this Course. \n",
"\n",
"To access the values of one column of the DataFrame you can use the column name as an attribute. For example, the following code will output `date` column of the DataFrame `df`:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"tags": [
"graded"
]
},
"outputs": [
{
"data": {
"text/plain": [
"0 1/02/2016\n",
"1 1/03/2016\n",
"2 1/04/2016\n",
"3 1/05/2016\n",
"4 1/06/2016\n",
"5 1/07/2016\n",
"6 1/08/2016\n",
"7 1/09/2016\n",
"8 1/10/2016\n",
"9 1/11/2016\n",
"10 1/12/2016\n",
"11 1/01/2017\n",
"12 1/02/2017\n",
"13 1/03/2017\n",
"14 1/04/2017\n",
"15 1/05/2017\n",
"16 1/06/2017\n",
"17 1/07/2017\n",
"18 1/08/2017\n",
"19 1/09/2017\n",
"20 1/10/2017\n",
"21 1/11/2017\n",
"22 1/12/2017\n",
"23 1/01/2018\n",
"24 1/02/2018\n",
"25 1/03/2018\n",
"26 1/04/2018\n",
"27 1/05/2018\n",
"28 1/06/2018\n",
"29 1/07/2018\n",
"30 1/08/2018\n",
"31 1/09/2018\n",
"32 1/10/2018\n",
"33 1/11/2018\n",
"34 1/12/2018\n",
"35 1/01/2019\n",
"36 1/02/2019\n",
"37 1/03/2019\n",
"38 1/04/2019\n",
"39 1/05/2019\n",
"40 1/06/2019\n",
"41 1/07/2019\n",
"42 1/08/2019\n",
"43 1/09/2019\n",
"44 1/10/2019\n",
"45 1/11/2019\n",
"46 1/12/2019\n",
"47 1/01/2020\n",
"48 1/02/2020\n",
"49 1/03/2020\n",
"Name: date, dtype: object"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.date"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a name='ex01'></a>\n",
"### Exercise 1\n",
"\n",
"Load the historical prices of supplier A and supplier B into variables `prices_A` and `prices_B`, respectively. Convert the price values into `NumPy` arrays with elements of type `float32` using `np.array` function."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<details> \n",
"<summary>\n",
" <font size=\"3\" color=\"darkgreen\"><b>Hint</b></font>\n",
"</summary>\n",
"<p>\n",
"<ul>\n",
" <li>The corresponding prices are in the DataFrame `df`, columns `price_supplier_a_dollars_per_item` and `price_supplier_b_dollars_per_item`.</li>\n",
" <li>Conversion into the `NumPy` array can be performed with the function `np.array`.</li>\n",
"</ul>\n",
"</p>"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"tags": [
"graded"
]
},
"outputs": [],
"source": [
"### START CODE HERE ### (~ 4 lines of code)\n",
"prices_A = df['price_supplier_a_dollars_per_item']\n",
"prices_B = df['price_supplier_b_dollars_per_item']\n",
"prices_A = np.array(prices_A).astype('float32')\n",
"prices_B = np.array(prices_B).astype('float32')\n",
"### END CODE HERE ###"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"tags": [
"graded"
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Some prices of supplier A: [104. 108. 101. 104. 102.]\n",
"Some prices of supplier B: [76. 76. 84. 79. 81.]\n",
"Average of the prices, supplier A: 100.799995\n",
"Average of the prices, supplier B: 100.0\n"
]
}
],
"source": [
"# Print some elements and mean values of the prices_A and prices_B arrays.\n",
"print(\"Some prices of supplier A:\", prices_A[0:5])\n",
"print(\"Some prices of supplier B:\", prices_B[0:5])\n",
"print(\"Average of the prices, supplier A:\", np.mean(prices_A))\n",
"print(\"Average of the prices, supplier B:\", np.mean(prices_B))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##### __Expected Output__ \n",
"\n",
"```Python\n",
"Some prices of supplier A: [104. 108. 101. 104. 102.]\n",
"Some prices of supplier B: [76. 76. 84. 79. 81.]\n",
"Average of the prices, supplier A: 100.799995\n",
"Average of the prices, supplier B: 100.0\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[92m All tests passed\n"
]
}
],
"source": [
"w1_unittest.test_load_and_convert_data(prices_A, prices_B)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Average prices from both suppliers are similar. But if you will plot the historical prices, you will see that there were periods of time when the prices were lower for supplier A, and vice versa."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"tags": [
"graded"
]
},
"outputs": [
{
"data": {
"image/png": "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UK9ePQDOnz9vur9owWxRW7ZsMV2/evUqR48eJSYmxnRbfn4+O3bsMH1/5MgRkpOTix1T3pi8vb05c+YMzZo1K/YVGRlp0c9XFnd3dwCysrJscr6yWFyDMmTIEIYMGVLqfcHBwaxcubLYbR999BFdu3blzJkzREVFcejQIX799Ve2b99uml768MMPufnmm3nvvfeIKCvhLISoMcwJUECleRYvVrUoL7xg/3GJmuny5cvceeedjBkzhnbt2hEYGMiOHTt49913GT58OAC+vr50796dadOmER0dzYULF3jppZdKPd/rr79OnTp1CA0N5cUXX6Ru3brFVuF4enry5JNPMmPGDDw8PHjiiSfo3r17hfUnAIGBgTz77LNMmjQJo9FIr169SElJYdOmTQQFBfHggw9a/PMnJyeTmJiI0Wjk2LFjvP7667Ro0cKsgKky7F4km5KSgsFgICQkBIDNmzcTEhJSLPfVv39/3Nzc2Lp1KyNGjLjmHDk5OcUqp1P1HcSEEC7JnBQPFNah/PknZGUV37NHCFsJCAigW7duvP/++5w4cYK8vDwiIyMZN24cLxSJjOfNm8fDDz9Mp06daNmyJe+++y4DBw685nzTpk3j6aef5tixY3To0IGffvoJLy8v0/1+fn78+9//5p577iE+Pp4bbriBuXPnmj3eN954g3r16jF16lROnjxJSEgIHTt2LDZWSzz00EOAatoWFhZG7969efvtt8vsm2IzWiUA2pIlS8q8PysrS+vYsaN2zz33mG576623tBYtWlxzbL169bSPP/641PO88sorGnDNV0pKSmWGL4RwUvXqaRpo2u7d5R9nNGpaw4bq2JUrq2RoopKysrK0gwcPallZWY4eSpVbu3atBmhXr14t85jPP/9cCw4OrrIx2UN5/8YpKSlmv3/bbRVPXl4ed911F5qmMWvWrEqda/LkyaSkpJi+ymtYI4So3tLT4eJFdb2iGRSDQdreC+Gq7BKg6MHJ6dOnWblyJUFBQab7wsLCuHDhQrHj8/PzuXLlCmFhYaWez9vbm6CgoGJfQgjXpKd3atdWGwNWRA9QVq2y35iEEFXP5gGKHpwcO3aMVatWUadOnWL39+jRg+TkZHYWWRe4Zs0ajEZjlXSmE0I4N3MLZHV6gLJzJ1y9ap8xCWELffv2RdM0U01maUaPHk1ycnKVjcmZWRygpKen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9a5a8npXLWteb03TSEtLIyIiAje38qtMquUMipubGw0bNrTrcwQFBckveBWS17tqyetdteT1rlryelctS1/vimZOdFIkK4QQQginIwGKEEIIIZyOBCgleHt788orr+Dt7e3oodQI8npXLXm9q5a83lVLXu+qZe/Xu1oWyQohhBDCtckMihBCCCGcjgQoQgghhHA6EqAIIYQQwulIgCKEEEIIpyMBShEzZ86kcePG+Pj40K1bN7Zt2+boIbmMDRs2MGzYMCIiIjAYDCxdurTY/Zqm8fLLLxMeHo6vry/9+/fn2LFjjhlsNTd16lS6dOlCYGAg9evX57bbbuPIkSPFjsnOzmbChAnUqVOHgIAARo4cSVJSkoNGXL3NmjWLdu3amZpV9ejRg19++cV0v7zW9jVt2jQMBgMTJ0403Savue28+uqrGAyGYl+tWrUy3W/P11oClL/973//45lnnuGVV15h165dtG/fnkGDBnHhwgVHD80lZGRk0L59e2bOnFnq/e+++y4zZsxg9uzZbN26FX9/fwYNGkR2dnYVj7T6W79+PRMmTGDLli2sXLmSvLw8Bg4cSEZGhumYSZMm8dNPP7Fw4ULWr19PQkICt99+uwNHXX01bNiQadOmsXPnTnbs2MFNN93E8OHDOXDgACCvtT1t376dTz75hHbt2hW7XV5z22rTpg3nz583fW3cuNF0n11fa01omqZpXbt21SZMmGD6vqCgQIuIiNCmTp3qwFG5JkBbsmSJ6Xuj0aiFhYVp//d//2e6LTk5WfP29ta+/fZbB4zQtVy4cEEDtPXr12uapl5bT09PbeHChaZjDh06pAHa5s2bHTVMl1KrVi1tzpw58lrbUVpamta8eXNt5cqVWp8+fbSnn35a0zT5/ba1V155RWvfvn2p99n7tZYZFCA3N5edO3fSv39/021ubm7079+fzZs3O3BkNUNcXByJiYnFXv/g4GC6desmr78NpKSkAFC7dm0Adu7cSV5eXrHXu1WrVkRFRcnrXUkFBQV89913ZGRk0KNHD3mt7WjChAkMHTq02GsL8vttD8eOHSMiIoImTZpw7733cubMGcD+r3W13CzQ1i5dukRBQQGhoaHFbg8NDeXw4cMOGlXNkZiYCFDq66/fJ6xjNBqZOHEi119/Pddddx2gXm8vLy9CQkKKHSuvt/X27dtHjx49yM7OJiAggCVLltC6dWv27Nkjr7UdfPfdd+zatYvt27dfc5/8fttWt27dmD9/Pi1btuT8+fO89tpr3HDDDezfv9/ur7UEKEK4sAkTJrB///5iOWNhey1btmTPnj2kpKSwaNEiHnzwQdavX+/oYbmks2fP8vTTT7Ny5Up8fHwcPRyXN2TIENP1du3a0a1bNxo1asT333+Pr6+vXZ9bUjxA3bp1cXd3v6byOCkpibCwMAeNqubQX2N5/W3riSeeYPny5axdu5aGDRuabg8LCyM3N5fk5ORix8vrbT0vLy+aNWtGp06dmDp1Ku3bt2f69OnyWtvBzp07uXDhAh07dsTDwwMPDw/Wr1/PjBkz8PDwIDQ0VF5zOwoJCaFFixYcP37c7r/fEqCg/rh06tSJ1atXm24zGo2sXr2aHj16OHBkNUN0dDRhYWHFXv/U1FS2bt0qr78VNE3jiSeeYMmSJaxZs4bo6Ohi93fq1AlPT89ir/eRI0c4c+aMvN42YjQaycnJkdfaDvr168e+ffvYs2eP6atz587ce++9puvymttPeno6J06cIDw83P6/35Uus3UR3333nebt7a3Nnz9fO3jwoPbII49oISEhWmJioqOH5hLS0tK03bt3a7t379YA7b///a+2e/du7fTp05qmadq0adO0kJAQ7ccff9T++usvbfjw4Vp0dLSWlZXl4JFXP4899pgWHBysrVu3Tjt//rzpKzMz03TMo48+qkVFRWlr1qzRduzYofXo0UPr0aOHA0ddfT3//PPa+vXrtbi4OO2vv/7Snn/+ec1gMGi///67pmnyWleFoqt4NE1ec1v65z//qa1bt06Li4vTNm3apPXv31+rW7euduHCBU3T7PtaS4BSxIcffqhFRUVpXl5eWteuXbUtW7Y4ekguY+3atRpwzdeDDz6oaZpaajxlyhQtNDRU8/b21vr166cdOXLEsYOupkp7nQHt888/Nx2TlZWlPf7441qtWrU0Pz8/bcSIEdr58+cdN+hqbMyYMVqjRo00Ly8vrV69elq/fv1MwYmmyWtdFUoGKPKa287dd9+thYeHa15eXlqDBg20u+++Wzt+/Ljpfnu+1gZN07TKz8MIIYQQQtiO1KAIIYQQwulIgCKEEEIIpyMBihBCCCGcjgQoQgghhHA6EqAIIYQQwulIgCKEEEIIpyMBihBCCCGcjgQoQgghhHA6EqAIIYQQwulIgCKEEEIIpyMBihBCCCGcjgQoQgghhHA6/w+ulJ3pnkocQgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure()\n",
"ax = fig.add_subplot(1, 1, 1)\n",
"plt.plot(prices_A, 'g', label=\"Supplier A\")\n",
"plt.plot(prices_B, 'b', label=\"Supplier B\")\n",
"plt.legend()\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Based on the historical data, can you tell which supplier it will be more profitable to work with? As discussed in the section [1.3](#1.3), you need to find such an $\\omega \\in \\left[0, 1\\right]$ which will minimize function $(2)$."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a name='2.3'></a>\n",
"### 2.3 - Construct the Function $\\mathcal{L}$ to Optimize and Find its Minimum Point"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a name='ex02'></a>\n",
"### Exercise 2\n",
"\n",
"Calculate `f_of_omega`, corresponding to the $f^i\\left(\\omega\\right)=p_A^i \\omega+ p_B^i \\left(1 - \\omega\\right)$. Prices $\\{p_A^1, \\cdots, p_A^k\\}$ and $\\{p_B^1, \\cdots, p_B^k\\}$ can be passed in the arrays `pA` and `pB`. Thus, multiplying them by the scalars `omega` and `1 - omega` and adding together the resulting arrays, you will get an array containing $\\{f^1\\left(\\omega\\right), \\cdots, f^k\\left(\\omega\\right)\\}$.\n",
"\n",
"\n",
"Then array `f_of_omega` can be taken to calculate `L_of_omega`, according to the expression $(2)$:\n",
"\n",
"$$\\mathcal{L}\\left(\\omega\\right) = \\frac{1}{k}\\sum_{i=1}^{k}\\left(f^i \\left(\\omega\\right) - \\overline{f\\left (\\omega\\right)}\\right)^2$$"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"tags": [
"graded"
]
},
"outputs": [],
"source": [
"def f_of_omega(omega, pA, pB):\n",
" ### START CODE HERE ### (~ 1 line of code)\n",
" f = pA * omega + pB * (1 - omega)\n",
" ### END CODE HERE ###\n",
" return f\n",
"\n",
"def L_of_omega(omega, pA, pB):\n",
" return 1/len(f_of_omega(omega, pA, pB)) * np.sum((f_of_omega(omega, pA, pB) - np.mean(f_of_omega(omega, pA, pB)))**2)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"tags": [
"graded"
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"L(omega = 0) = 110.72\n",
"L(omega = 0.2) = 61.1568\n",
"L(omega = 0.8) = 11.212797\n",
"L(omega = 1) = 27.48\n"
]
}
],
"source": [
"print(\"L(omega = 0) =\",L_of_omega(0, prices_A, prices_B))\n",
"print(\"L(omega = 0.2) =\",L_of_omega(0.2, prices_A, prices_B))\n",
"print(\"L(omega = 0.8) =\",L_of_omega(0.8, prices_A, prices_B))\n",
"print(\"L(omega = 1) =\",L_of_omega(1, prices_A, prices_B))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##### __Expected Output__ \n",
"\n",
"```Python\n",
"L(omega = 0) = 110.72\n",
"L(omega = 0.2) = 61.1568\n",
"L(omega = 0.8) = 11.212797\n",
"L(omega = 1) = 27.48\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[92m All tests passed\n"
]
}
],
"source": [
"w1_unittest.test_f_of_omega(f_of_omega)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Analysing the output above, you can notice that values of the function $\\mathcal{L}$ are decreasing for $\\omega$ increasing from $0$ to $0.2$, then to $0.8$, but there is an increase of the function $\\mathcal{L}$ when $\\omega = 1$. What will be the $\\omega$ giving the minimum value of the function $\\mathcal{L}$?\n",
"\n",
"In this simple example $\\mathcal{L}\\left(\\omega\\right)$ is a function of one variable and the problem of finding its minimum point with a certain accuracy is a trivial task. You just need to calculate function values for each $\\omega = 0, 0.001, 0.002, \\cdots , 1$ and find minimum element of the resulting array.\n",
"\n",
"Function `L_of_omega` will not work if you will pass an array instead of a single value of `omega` (it was not designed for that). It is possible to rewrite it in a way that it would be possible, but here there is no need in that right now - you can calculate the resulting values in the loop as there will be not as many of them."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a name='ex03'></a>\n",
"### Exercise 3\n",
"\n",
"Evaluate function `L_of_omega` for each of the elements of the array `omega_array` and pass the result into the corresponding element of the array `L_array` with the function `.at[<index>].set(<value>)`.\n",
"\n",
"*Note*: `jax.numpy` has been uploaded instead of the original `NumPy`. Up to this moment `jax` functionality has not been actually used, but it will be called in the cells below. Thus there was no need to upload both versions of the package, and you have to use `.at[<index>].set(<value>)` function to update the array."
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"tags": [
"graded"
]
},
"outputs": [],
"source": [
"# Parameter endpoint=True will allow ending point 1 to be included in the array.\n",
"# This is why it is better to take N = 1001, not N = 1000\n",
"N = 1001\n",
"omega_array = np.linspace(0, 1, N, endpoint=True)\n",
"\n",
"# This is organised as a function only for grading purposes.\n",
"def L_of_omega_array(omega_array, pA, pB):\n",
" N = len(omega_array)\n",
" L_array = np.zeros(N)\n",
"\n",
" for i in range(N):\n",
" ### START CODE HERE ### (~ 2 lines of code)\n",
" L = L_of_omega(omega_array[i], pA, pB)\n",
" L_array = L_array.at[i].set(L)\n",
" ### END CODE HERE ###\n",
" \n",
" return L_array\n",
"\n",
"L_array = L_of_omega_array(omega_array, prices_A, prices_B)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"tags": [
"graded"
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"L(omega = 0) = 110.72\n",
"L(omega = 1) = 27.48\n"
]
}
],
"source": [
"print(\"L(omega = 0) =\",L_array[0])\n",
"print(\"L(omega = 1) =\",L_array[N-1])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##### __Expected Output__ \n",
"\n",
"```Python\n",
"L(omega = 0) = 110.72\n",
"L(omega = 1) = 27.48\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[92m All tests passed\n"
]
}
],
"source": [
"w1_unittest.test_L_of_omega_array(L_of_omega_array)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now a minimum point of the function $\\mathcal{L}\\left(\\omega\\right)$ can be found with a `NumPy` function `argmin()`. As there were $N = 1001$ points taken in the segment $\\left[0, 1\\right]$, the result will be accurate to three decimal places:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"tags": [
"graded"
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"omega_min = 0.702\n",
"L_of_omega_min = 9.2497196\n"
]
}
],
"source": [
"i_opt = L_array.argmin()\n",
"omega_opt = omega_array[i_opt]\n",
"L_opt = L_array[i_opt]\n",
"print(f'omega_min = {omega_opt:.3f}\\nL_of_omega_min = {L_opt:.7f}')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This result means that, based on the historical data, $\\omega = 0.702$ is expected to be the most profitable choice for the share between suppliers A and B. It is reasonable to plan $70.2\\%$ of product P to be supplied from Company A, and $29.8\\%$ from Company B. \n",
"\n",
"If you would like to improve the accuracy, you just need to increase the number of points N. This is a very simple example of a model with one parameter, resulting in optimization of a function of one variable. It is computationally cheap to evaluate it in many points to find the minimum with certain accuracy. But in machine learning the models have hundreds of parameters, using similar approach you would need to perform millions of target function evaluations. This is not possible in most of the cases, and that's where Calculus with its methods and approaches comes into play. \n",
"\n",
"In the next weeks of this Course you will learn how to optimize multivariate functions using differentiation. But for now as you are on the learning curve, let's evaluate the derivative of the function $\\mathcal{L}\\left(\\omega\\right)$ at the points saved in the array `omega_array` to check that at the minimum point the derivative is actually the closest to zero. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a name='ex04'></a>\n",
"### Exercise 4\n",
"\n",
"For each $\\omega$ in the `omega_array` calculate $\\frac{d\\mathcal{L}}{d\\omega}$ using `grad()` function from `JAX` library. Remember that you need to pass the function which you want to differentiate (here $\\mathcal{L}\\left(\\omega\\right)$) as an argument of `grad()` function and then evaluate the derivative for the corresponding element of the `omega_array`. Then pass the result into the corresponding element of the array `dLdOmega_array` with the function `.at[<index>].set(<value>)`."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<details> \n",
"<summary>\n",
" <font size=\"3\" color=\"darkgreen\"><b>Hint</b></font>\n",
"</summary>\n",
"<p>\n",
"<ul>\n",
" <li>Function $\\mathcal{L}\\left(\\omega\\right)$ is implemented in the code as `L_of_omega`.</li>\n",
"</ul>\n",
"</p>"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"tags": [
"graded"
]
},
"outputs": [],
"source": [
"# This is organised as a function only for grading purposes.\n",
"def dLdOmega_of_omega_array(omega_array, pA, pB):\n",
" N = len(omega_array)\n",
" dLdOmega_array = np.zeros(N)\n",
"\n",
" for i in range(N):\n",
" ### START CODE HERE ### (~ 2 lines of code)\n",
" dLdOmega = grad(L_of_omega)(omega_array[i], pA, pB)\n",
" dLdOmega_array = dLdOmega_array.at[i].set(dLdOmega)\n",
" ### END CODE HERE ###\n",
" \n",
" return dLdOmega_array\n",
"\n",
"dLdOmega_array = dLdOmega_of_omega_array(omega_array, prices_A, prices_B)"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"tags": [
"graded"
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"dLdOmega(omega = 0) = -288.96\n",
"dLdOmega(omega = 1) = 122.47999\n"
]
}
],
"source": [
"print(\"dLdOmega(omega = 0) =\",dLdOmega_array[0])\n",
"print(\"dLdOmega(omega = 1) =\",dLdOmega_array[N-1])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##### __Expected Output__ \n",
"\n",
"```Python\n",
"dLdOmega(omega = 0) = -288.96\n",
"dLdOmega(omega = 1) = 122.47999\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[92m All tests passed\n"
]
}
],
"source": [
"w1_unittest.test_dLdOmega_of_omega_array(dLdOmega_of_omega_array)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now to find the closest value of the derivative to $0$, take absolute values $\\left|\\frac{d\\mathcal{L}}{d\\omega}\\right|$ for each omega and find minimum of them."
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"tags": [
"graded"
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"omega_min = 0.702\n",
"dLdOmega_min = -0.1290760\n"
]
}
],
"source": [
"i_opt_2 = np.abs(dLdOmega_array).argmin()\n",
"omega_opt_2 = omega_array[i_opt_2]\n",
"dLdOmega_opt_2 = dLdOmega_array[i_opt_2]\n",
"print(f'omega_min = {omega_opt_2:.3f}\\ndLdOmega_min = {dLdOmega_opt_2:.7f}')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The result is the same: $\\omega = 0.702$. Let's plot $\\mathcal{L}\\left(\\omega\\right)$ and $\\frac{d\\mathcal{L}}{d\\omega}$ to visualize the graphs of them, minimum point of the function $\\mathcal{L}\\left(\\omega\\right)$ and the point where its derivative is around $0$:"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"tags": [
"graded"
]
},
"outputs": [
{
"data": {
"image/png": "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eTMzMyviRxERESfn4+ODh4cHycnJ1K1bFx8fH2w2m9WxXJZhGBQWFpKWloaHh0epnQTlUebSMXnyZF599dXzrrNjxw5at24NwKRJkxgzZgwHDhzgueee44477mDBggWV+ofg5Zdfvuib5YiIiPvw8PCgadOmHD169IwTF6T8AgICaNSoUbkuPvZHZS4dEydOZPTo0eddJyIiwvF9SEgIISEhtGzZkjZt2hAeHs66deuIiooiNDSU1NTUUq89PQ4NDXV8Pds6p58/m8cff5xHHnnEMc7MzCzXBVNERMT1+Pj40KhRI4qLiykpKbE6jsvz9PTEy8urQnYWlLl01K1bt9y3vj09J3R66iMqKoonnniCoqIix3Eey5Yto1WrVtSuXduxzvLly0td+GTZsmVERUWd83N8fX3x9fUtV0YREXF9NpsNb29vx98t4hwq7UDSuLg43n//fRISEjhw4AA///wzw4cPp1mzZo7CMGLECHx8fBgzZgyJiYnMnj2bd955p9ReigcffJDFixfzxhtvsHPnTp599lk2bNjAhAkTKiu6iIiIVIJKKx0BAQF8//33XHvttbRq1YoxY8bQvn17fvnlF8deiODgYJYuXUpSUhJdunRh4sSJPP3009x9992O94mOjuabb75hxowZdOjQge+++4758+fTtm3byoouIiIilcD97zKLrtMhIiLiDHTvFREREakSKh0iIiJSJarF9IphGGRlZREYGKiLxIiIiFikWpQOERERsZ6mV0RERKRKqHSIiIhIlVDpEBERkSqh0iEiIiJVQqVDREREqoRKh4iIiFQJlQ4RERGpEiodIiIiUiX+D2klbLv5emqeAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure()\n",
"ax = fig.add_subplot(1, 1, 1)\n",
"# Setting the axes at the origin.\n",
"ax.spines['left'].set_position('zero')\n",
"ax.spines['bottom'].set_position('zero')\n",
"ax.spines['right'].set_color('none')\n",
"ax.spines['top'].set_color('none')\n",
"ax.xaxis.set_ticks_position('bottom')\n",
"ax.yaxis.set_ticks_position('left')\n",
"\n",
"plt.plot(omega_array, L_array, \"black\", label = \"$\\mathcal{L}\\\\left(\\omega\\\\right)$\")\n",
"plt.plot(omega_array, dLdOmega_array, \"orange\", label = \"$\\mathcal{L}\\'\\\\left(\\omega\\\\right)$\")\n",
"plt.plot([omega_opt, omega_opt_2], [L_opt,dLdOmega_opt_2], 'ro', markersize=3)\n",
"\n",
"plt.legend()\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Congratulations, you have finished the assignment for this week! This example illustrates how optimization problems may appear in real life, and gives you an opportunity to explore the simple case of minimizing a function with one variable. Now it is time to learn about optimization of multivariate functions!"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": [
"graded"
]
},
"outputs": [],
"source": []
}
],
"metadata": {
"accelerator": "GPU",
"colab": {
"collapsed_sections": [],
"name": "C1_W1_Assignment_Solution.ipynb",
"provenance": []
},
"coursera": {
"schema_names": [
"AI4MC1-1"
]
},
"grader_version": "2",
"kernelspec": {
"display_name": "Python 3",
"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.8.8"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
},
"vscode": {
"interpreter": {
"hash": "f35d3e96467e1932767366762e4d928eed10b308a51952d02c874201cfd8a75d"
}
}
},
"nbformat": 4,
"nbformat_minor": 1
}