mirror of
https://github.com/TeachBooks/manual.git
synced 2026-11-12 22:35:51 +00:00
333 lines
40 KiB
Text
333 lines
40 KiB
Text
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Coding theory, interactive quizzes & live code\n",
|
|
"\n",
|
|
"This page shows an example on how to combine the introduction of a certain coding implementation with interactive questions. Compared to the previous template, the learning objective is to learn a new skill in programming using the live coding feature whereas before programming was used to illustrate a theoretic concept unrelated to coding (for example statistics)."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"```{custom_download_link} ./Unconstrained_optimization_stripped.ipynb\n",
|
|
":replace_default: \"True\"\n",
|
|
"```"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Example unconstrained optimization\n",
|
|
"\n",
|
|
"In this chapter, we'll cover how to apply `scipy.optimize.minimize` to unconstrained optimization problems. As a reminder, unconstrained optimization considers:\n",
|
|
"\n",
|
|
"```{math}\n",
|
|
":label: unconstrained_optimizatino\n",
|
|
"\n",
|
|
"\\mathop {\\min }\\limits_x f\\left( x \\right)\n",
|
|
"```\n",
|
|
"with $x$ the design variable of length $n$ and $f$ the objective function.\n",
|
|
"\n",
|
|
"\n",
|
|
"### Method\n",
|
|
"In this course, we're making use of the function `scipy.optimize.minimize`. The documentation of this function is available here: \n",
|
|
"https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html. In this course we'll cover only the relevant parts.\n",
|
|
"\n",
|
|
"For unconstrained optimization we need to run at least `scipy.optimize.minimize(fun, x0, ...)` with:\n",
|
|
"- `fun`, the objective function $f(x)$ to be minimized. `fun` is a callable. The `scipy.optmize.minimize` function takes care of defining and inputing our design variable $x$.\n",
|
|
"- `x0`, the initial guess for our design variable $x$. It needs to be a `ndarray` with length $n$\n",
|
|
"\n",
|
|
"The function `scipy.optimize.minimize` outputs an object `scipy.optimize.OptimizeResult`. with:\n",
|
|
"- `scipy.optimize.OptimizeResult.x` the optimized solution of the design variable `x`. It is a `ndarray` with length $n$\n",
|
|
"- `scipy.optimize.OptimizeResult.success`, a indication whether or not the optimizer was executed succesfully. It is a `bool`, indicating `True` or `False`\n",
|
|
"- `scipy.optimize.OptimizeResult.message`, a message describing the cause of termination of the optimizatino algorithm. It is a `str`.\n",
|
|
"- `scipy.optimize.OptimizeResult.fun`, the values of the optimized objective function $f$. It is a `int` or `float`\n",
|
|
"- `scipy.optimize.OptimizeResult.nit`, the number of iteration performed by the optimizer. It is a `int`\n",
|
|
"\n",
|
|
":::{card}\n",
|
|
"<iframe src=\"https://tudelft.h5p.com/content/1292011279864402367/embed\" aria-label=\"Example 1_method\" width=\"1088\" height=\"637\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\" allow=\"autoplay *; geolocation *; microphone *; camera *; midi *; encrypted-media *\"></iframe><script src=\"https://tudelft.h5p.com/js/h5p-resizer.js\" charset=\"UTF-8\"></script>\n",
|
|
":::"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Example 1\n",
|
|
"\n",
|
|
"#### Problem\n",
|
|
"It is desired to determine the number of bathymetry maps $n$ of a local area that should be produced to maximize the profit of a company. The total cost of production and distribution is €$75$ per unit $n$. The revenues are proportional to the number of units multiplied by its price: $Revenues = n \\cdot Price $\n",
|
|
"\n",
|
|
"The demand depends on the price ($Price = 150 - 0.01n^2$), as shown in the graph:\n",
|
|
"\n",
|
|
"```{figure} ./coding_theory_widgets_images/output.png\n",
|
|
"---\n",
|
|
"width: 600px\n",
|
|
"name: demand with respect to pice\n",
|
|
"---\n",
|
|
"```"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"The profit can be estimated as the revenues minus the total costs."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"#### Model\n",
|
|
"The function for the profit can be found by combining the relations in the problem statement. However, this is the profit which should be maximized. To turn this into a minimization problem, the profit can be multiplied with $-1$. The final model of this problem results in:\n",
|
|
"\n",
|
|
"```{math}\n",
|
|
":label: unconstrained_optimization_problem\n",
|
|
"\n",
|
|
"\\mathop {\\min }\\limits_n \\left(75n - \\left( 150 - 0.01n^2 \\right) n \\right)\n",
|
|
"```"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
":::{card}\n",
|
|
"<iframe src=\"https://tudelft.h5p.com/content/1292067269315918707/embed\" aria-label=\"Example 1_linear and convex\" width=\"1088\" height=\"637\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\" allow=\"autoplay *; geolocation *; microphone *; camera *; midi *; encrypted-media *\"></iframe><script src=\"https://tudelft.h5p.com/js/h5p-resizer.js\" charset=\"UTF-8\"></script>\n",
|
|
":::"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"#### Method\n",
|
|
"\n",
|
|
"This model is described using `scipy.optimize.minimize`."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"##### Importing libraries"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"metadata": {
|
|
"tags": [
|
|
"auto-execute-page",
|
|
"thebe-init"
|
|
]
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"import scipy as sp \n",
|
|
"import numpy as np\n",
|
|
"import matplotlib.pylab as plt"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"##### Defining the variables\n",
|
|
"There are very few variables in this problem. In fact, the only variable we have to specify is the initial guess for the optimization algorithm. The objective function will be treated later.\n",
|
|
"The length of $n$ doesn't have to be specified."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"metadata": {
|
|
"tags": [
|
|
"thebe-init"
|
|
]
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"n0 = 20"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
":::{card}\n",
|
|
"<iframe src=\"https://tudelft.h5p.com/content/1292011310223381757/embed\" aria-label=\"Problem 1 variables\" width=\"1088\" height=\"637\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\" allow=\"autoplay *; geolocation *; microphone *; camera *; midi *; encrypted-media *\"></iframe><script src=\"https://tudelft.h5p.com/js/h5p-resizer.js\" charset=\"UTF-8\"></script>\n",
|
|
":::"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"##### Defining the objective function\n",
|
|
"In the objective function, the formula given in the model description can be inserted. Or, each individual step can be calculated on a seperate line. Again, note that the profit is multiplied with $-1$ to maximize the profit in the minimization formulation.\n",
|
|
"This results in:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"metadata": {
|
|
"tags": [
|
|
"thebe-init"
|
|
]
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def negprofit(n):\n",
|
|
" price = 150 - 0.01 * n**2\n",
|
|
" revenues = price * n\n",
|
|
" totalcost = 75 * n\n",
|
|
" profit = revenues - totalcost\n",
|
|
" return -profit"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"##### Solving the problem\n",
|
|
"Now, the problem can be solved. The result is stored in the variables `result` which is printed."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 13,
|
|
"metadata": {
|
|
"tags": [
|
|
"thebe-init"
|
|
]
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
" message: Optimization terminated successfully.\n",
|
|
" success: True\n",
|
|
" status: 0\n",
|
|
" fun: -2499.9999999998727\n",
|
|
" x: [ 5.000e+01]\n",
|
|
" nit: 8\n",
|
|
" jac: [ 0.000e+00]\n",
|
|
" hess_inv: [[ 3.503e-01]]\n",
|
|
" nfev: 22\n",
|
|
" njev: 11\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"result = sp.optimize.minimize(negprofit,n0)\n",
|
|
"print(result)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
":::{card}\n",
|
|
"<iframe src=\"https://tudelft.h5p.com/content/1292011319959180647/embed\" aria-label=\"Example 1 Solving\" width=\"1088\" height=\"637\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\" allow=\"autoplay *; geolocation *; microphone *; camera *; midi *; encrypted-media *\"></iframe><script src=\"https://tudelft.h5p.com/js/h5p-resizer.js\" charset=\"UTF-8\"></script>\n",
|
|
":::"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"##### Postprocessing\n",
|
|
"As this case is only one-dimensional and the potential range of values is limited, we can easily check this answer by an exhaustive search, evaluating all possible values for $n$. The plot below shows the $\\text{negative profit}$ for $0<n<100$. It shows a clear minimum which coincides with the minimum found by `scipy.optimize.minimize`"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 14,
|
|
"metadata": {
|
|
"tags": [
|
|
"thebe-init"
|
|
]
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"n_range = np.linspace(0,100,100)\n",
|
|
"negprofit_result = negprofit(n_range)\n",
|
|
"plt.plot(n_range,negprofit_result)\n",
|
|
"plt.plot(result.x,result.fun,'o');\n",
|
|
"plt.xlabel('$n$')\n",
|
|
"plt.ylabel('Negative profit');"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
":::{card}\n",
|
|
"<iframe src=\"https://tudelft.h5p.com/content/1292012050691010717/embed\" aria-label=\"Example 1_postprocessing\" width=\"1088\" height=\"637\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\" allow=\"autoplay *; geolocation *; microphone *; camera *; midi *; encrypted-media *\"></iframe><script src=\"https://tudelft.h5p.com/js/h5p-resizer.js\" charset=\"UTF-8\"></script>\n",
|
|
":::"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Exercise\n",
|
|
"\n",
|
|
":::{card}\n",
|
|
"Adapt the code to answer the following questions.\n",
|
|
"\n",
|
|
"<iframe src=\"https://tudelft.h5p.com/content/1292049357532312317/embed\" aria-label=\"Example 1_exercise 1\" width=\"1088\" height=\"637\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\" allow=\"autoplay *; geolocation *; microphone *; camera *; midi *; encrypted-media *\"></iframe><script src=\"https://tudelft.h5p.com/js/h5p-resizer.js\" charset=\"UTF-8\"></script>\n",
|
|
"\n",
|
|
"<iframe src=\"https://tudelft.h5p.com/content/1292049366142420277/embed\" aria-label=\"Example 1_exercise 2\" width=\"1088\" height=\"637\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\" allow=\"autoplay *; geolocation *; microphone *; camera *; midi *; encrypted-media *\"></iframe><script src=\"https://tudelft.h5p.com/js/h5p-resizer.js\" charset=\"UTF-8\"></script>\n",
|
|
":::"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "base",
|
|
"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.9.18"
|
|
},
|
|
"orig_nbformat": 4
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|