From 8a657bd0cbf681a7fbb835ca2361a1aba7d3fe5e Mon Sep 17 00:00:00 2001 From: Daniel Duque Date: Mon, 20 Dec 2021 19:40:35 -0500 Subject: [PATCH 1/9] Enunciado para ejemplo de linearizacion --- optimizacion/Soluciones/CryptOR.ipynb | 550 ++++++++++++++++++++++++++ 1 file changed, 550 insertions(+) create mode 100644 optimizacion/Soluciones/CryptOR.ipynb diff --git a/optimizacion/Soluciones/CryptOR.ipynb b/optimizacion/Soluciones/CryptOR.ipynb new file mode 100644 index 0000000..430c242 --- /dev/null +++ b/optimizacion/Soluciones/CryptOR.ipynb @@ -0,0 +1,550 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Producción de Energía" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Tags: Transporte" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Enunciado\n", + "CryptOR is una compañía que se dedica a minar criptomonedas. El mayor problema de planeación para CryptOR es la compra de energía. Dado el alto consumo de energía, CryptOR debe negociar contratos anuales con las diferentes empresas de generación eléctrica. El costo por kilovatio-hora (kWh) varía según la cantidad de energía contratada y la empresa generadora. La tabla 1 indica la función de costo por kilovatio-hora para cada empresa generadora. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Tabla 1. Cost de energía for $x$ kilovatios-hora.\n", + "\n", + "| |**Función de costo**|\n", + "|:----------:|----------:|\n", + "|**Carbon**|$c(x) = 0.0012 x^2$ |\n", + "|**Solar**|$c(x) = 0.0028 x^2 - 0.5x + 35$|\n", + "|**Eólica**|$c(x) = 0.5 x log(\\frac{x}{150}) + 30$" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "kwh = np.arange(1,250)\n", + "# TODO add subplots\n", + "def f1(x):\n", + " return 0.0012 * (x ** 2)\n", + "def f2(x):\n", + " return 0.0028 * x ** 2 - 0.5*x + 35\n", + "def f3(x):\n", + " return 0.5 * x*np.log(x/150) + 30\n", + "plt.plot(kwh, f1(kwh))\n", + "plt.plot(kwh, f2(kwh))\n", + "plt.plot(kwh, f3(kwh))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "TODO: linearizar" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(-1.0, 100.0)" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(kwh, f1(kwh))\n", + "for x_0 in [20, 50, 100, 200]:\n", + " plt.plot(kwh, f1(x_0) + 0.0012*2 * x_0 * (kwh - x_0))\n", + " print(f'Function en {x_0}: {f1(x_0):.3f} + {df1(x_0):.3f} * (x - {x_0})')\n", + "plt.ylim([-1, 100])" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(-1.0, 100.0)" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(kwh, f2(kwh))\n", + "def df2(x):\n", + " return 2 * 0.0028 * x - 0.5\n", + "for x_0 in [20, 50, 100, 200]:\n", + " plt.plot(kwh, f2(x_0) + df2(x_0) * (kwh - x_0))\n", + " print(f'Function en {x_0}: {f2(x_0):.3f} + {df2(x_0):.3f} * (x - {x_0})')\n", + "plt.ylim([-1, 100])" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Function en 20: 9.851 + -0.507 * (x - 20)\n", + "Function en 50: 2.535 + -0.049 * (x - 50)\n", + "Function en 100: 9.727 + 0.297 * (x - 100)\n", + "Function en 200: 58.768 + 0.644 * (x - 200)\n" + ] + }, + { + "data": { + "text/plain": [ + "(-1.0, 100.0)" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD8CAYAAACMwORRAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAAsTAAALEwEAmpwYAAA45klEQVR4nO3dd3hUVf7H8feZSe+9E2roEHoRGyIoRUAUERsqiEq1t/3trnWXVVdpIqCCCKyIgFJVimJBKaGEEHoNgUB6b1PO749EBQ0CSSaTTL6v58kzyZ3Jvd/DDZ+5c+855yqtNUIIIRyLwd4FCCGEqH4S7kII4YAk3IUQwgFJuAshhAOScBdCCAck4S6EEA7osuGulJqnlEpVSu27YFmAUmqDUupI+aP/Bc+9qJQ6qpQ6pJS6xVaFCyGEuLQrOXL/GLj1D8teADZprWOATeU/o5RqDdwNtCn/nVlKKWO1VSuEEOKKXDbctdY/AJl/WDwEWFD+/QJg6AXLl2itS7TWJ4CjQLfqKVUIIcSVcqrk74VqrVMAtNYpSqmQ8uWRwNYLXpdcvuxPlFJjgbEAnp6enVu2bFnJUoQQon7auXNnutY6uKLnKhvul6IqWFbh/AZa67nAXIAuXbrouLi4ai5FCCEcm1Lq1KWeq2xvmfNKqfDylYcDqeXLk4EGF7wuCjhbyW0IIYSopMqG+ypgVPn3o4CVFyy/WynlqpRqDMQA26tWohBCiKt12dMySqlPgRuBIKVUMvBPYAqwVCk1GkgChgNorROVUkuB/YAZGK+1ttiodiGEEJdw2XDXWo+8xFN9LvH6N4A3qlKUEEKIqpERqkII4YAk3IUQwgFJuAshhAOScBdCCAck4S6EEA5Iwl0IIRyQhLsQQjggCXchhHBAEu5CCGEnH/54nO8OpV7+hZUg4S6EEHbw05F03lh3gNXxtplbUcJdCCFq2LmcYiYv2U1MiBevD21rk21IuAshRA0yWaxM/HQXRSYLs+7thIdLdd9Wo4xt1iqEEKJCb39ziB0ns5h2dweahXjbbDty5C6EEDVkw/7zzPnhOPf1iGZIhwrvQFptJNyFEKIGnM4s5Omle2gX6cvfB7UGYM/GJE4mpNtkexLuQghhY8UmC+MW7wJg1r2dcHUycmhrCluWHeXoTtt0hZRz7kIIYWOvr91PwpkcPnigCw0CPDh9IJNvPzlIZAs/et/b0ibblCN3IYSwoS92J7NoaxKPXt+Evq1DSTudx1dzEvAP96D/Y+0xOtsmhiXchRDCRg6k5PLiigS6Nw7g2VtakJdZzJqZ8bi6OzFoQiyu7rY7eSLhLoQQNpBbbOLxRTvxcXNmxj0dMRdbWD19D+ZSK4MmxOLl72bT7Uu4CyFENdNa88zSeJKziph1bycC3JxZ9/5ectKLGPBYOwIjvWxeg4S7EEJUs9nfH2f9/vO8NKAVnaP92Tj/AClHc7h5VGsiW/jXSA0S7kIIUY1+PprOW98cZFD7cB7q1Ygty49ybFcq1wxrRkzX0BqrQ8JdCCGqSUpOERM/3U2TYC/+c0d74jedJn7Tadr3jqJD3wY1WouEuxBCVINSs5Xxi3dRbLIw+77OnE3IYMuyozTtGEyv4TEopWq0Hgl3IYSoBv9ad4BdSdm8NTwWjxwTGz/eT3hTX25+qDUGQ80GO0i4CyFEla3cc4aPfz7JmGsb0yPQh3XvJ+Ab5M6Ace1xcjHapSYJdyGEqIJD5/J4YXkC3RoFMKFnY1bP3IPRycCgCbG4eTrbrS4JdyGEqKS88oFKXm5OvDusHV/PSqCkwMygCbH4BLnbtTYJdyGEqAStNc9+vpdTmYXMGNGBuP8dISulgFsfbUtwtO1uwnGlJNyFEKISPvjxOF8nnuOFW1uQ/2MqyQez6H1/S6JbB9q7NEDCXQghrtrPR9P5z9eHGNAujLYZmkPbztF9cGNa9gy3d2m/kXAXQoirkJxVyIRPd9MkyJOHw4LZ9U0Sra+LoHP/RvYu7SIS7kIIcYWKTRYeXbgTk8XKa12bsH3ZURq1C+SGu5vX+CCly6lSuCulnlRKJSql9imlPlVKuSmlApRSG5RSR8ofa2aWHCGEsCGtNS+uSGB/Si5TbmhO/NJjBDf0od+YthiMte84udIVKaUigUlAF611W8AI3A28AGzSWscAm8p/FkKIOu3jn0/yxe4zPNW9MefWJOPh58rAce1xdrXPIKXLqerbjRPgrpRyAjyAs8AQYEH58wuAoVXchhBC2NXW4xm8vvYAA5oF4xeXDQpumxiLh4+LvUu7pEqHu9b6DPA2kASkADla6/VAqNY6pfw1KUBIRb+vlBqrlIpTSsWlpaVVtgwhhLCps9lFjF+8i6b+7lx/HgpzShk4vj1+IR72Lu0vVeW0jD9lR+mNgQjAUyl135X+vtZ6rta6i9a6S3BwcGXLEEIImyk2WXhs0U5MJitjjD5kJudzyyNtCWvsa+/SLqsqp2VuBk5ordO01iZgBXANcF4pFQ5Q/pha9TKFEKJmaa352xf72Hs6h+eCg0k7nMP1I1vQqH2QvUu7IlUJ9ySgh1LKQ5X1AeoDHABWAaPKXzMKWFm1EoUQouYt3HqK5buSeSoylJzEbDr3b0jb6yPtXdYVc6rsL2qttymllgG7ADOwG5gLeAFLlVKjKXsDGF4dhQohRE3ZfiKTV1fv565Af4z7c2nZI4zug5vYu6yrUulwB9Ba/xP45x8Wl1B2FC+EEHVOSk4R4xbvpKurO41OFBPVyp8b729Z6wYpXU6Vwl0IIRxJ2QXUXXgVWLmhQOEf6cmtj7bDWAsHKV1O3atYCCFsQGvNP1cmcvJkDneXuOHh5cKgCbG4uNXNY2AJdyGEAD755RQrt59mjPbCCcWgibF4+rrau6xKk3AXQtR7Px9N51+r9/OQ1QvnYisDxrUnINzT3mVViYS7EKJeO5VRwPjFu7jT5IZXgYW+D7cmopmfvcuqMgl3IUS9lV9i5pEFO+iZayAiH64dHkPTThXOmFLnSLgLIeolq1XzxJI9+J8uoU2BgQ43NyD2pgb2LqvaSLgLIeqldzYc5kx8OtcXORPTJYRrhjWzd0nVSsJdCFHvrI4/y6r1xxlY5EJEjB99RrVGGerWIKXLkXAXQtQr+87kMGXJXu4ociUgzIMBj7fD6Ox4Ueh4LRJCiEtIyyth8rw4huY64+3twm0TO+Dq4WzvsmxCwl0IUS+UmC1MWBDHDec03k5GhkzqgHeAm73LshkJdyGEw9Na8/cVCTQ6UEigNjDo8fYERnrZuyybknAXQji8+VtOUPhjKtEWI30fbE1UywB7l2RzEu5CCIe2+VAqP3x+hFYmJ3oMbULzbmH2LqlGSLgLIRzWkfN5zPkwnq4lzrS8LoJOtzS0d0k1RsJdCOGQMvJL+Md7O+iVZyC8TQC9R7aoczfcqAoJdyGEwykxW3ju/R30SNX4RHox+NF2GBxskNLlSLgLIRyK1pp/LNxDq+MluPm5cteTnXByMdq7rBon4S6EcCizvj6M7/Ys3FyMjHymM25ejjlI6XIk3IUQDmPdrmTOrzmNtzIw/MlO+AS527sku5FwF0I4hL1J2Xw//yDBFgO3jm1LaCMfe5dkVxLuQog6LyW7iPnTdhJtMtD9rmbEdHCMG25UhYS7EKJOKyq18Obb22hWoGh8YwTdboq2d0m1goS7EKLOslo1r03bRrN0K75t/Og/ooW9S6o1JNyFEHXWu5/EE36sCEOEO/eM61CvBildjoS7EKJOWrTuMIatGZh9nBn9bBcMRomzC8m/hhCiztm4PZmU1aexuhp4+MVuuLjXz77sf0XCXQhRp+w9lsH2BYdwMijufroTvv6Oe8ONqpBwF0LUGWfSC/hi2h48rdD30bZERvvau6RaS8JdCFEn5BWamDNlOwGlEDu8GW3bS1/2v+Jk7wKEEOJyTGYL/52yldB8TVjvCG68qf7My15ZcuQuhKjVtNb8d1ocwakmXNr5cceIVvYuqU6QcBdC1GpzP0nA+0gBpVHujBnX0d7l1BlVCnellJ9SaplS6qBS6oBSqqdSKkAptUEpdaT80b+6ihVC1C8r1h2h5Jc08v2cmPBcNxmkdBWqeuQ+Dfhaa90SiAUOAC8Am7TWMcCm8p+FEOKq/Lj9DKdWJ1HoZuDxl7rjXA9vuFEVlQ53pZQPcD3wEYDWulRrnQ0MARaUv2wBMLRqJQoh6puDRzPZ+vFBTAbFvc92xsfH1d4l1TlVOXJvAqQB85VSu5VSHyqlPIFQrXUKQPljhf2VlFJjlVJxSqm4tLS0KpQhhHAkKWllfdmNGvo93o4GkfV7XvbKqkq4OwGdgPe11h2BAq7iFIzWeq7WuovWuktwcHAVyhBCOIq8AhMf/Xs7niZN7MgYOrSVbKisqoR7MpCstd5W/vMyysL+vFIqHKD8MbVqJQoh6oNSk4Vpb/yCf6Em4pYo+lwv87JXRaXDXWt9DjitlPp1AuU+wH5gFTCqfNkoYGWVKhRCODyr1co7b23DP9OMa5cA7rxd5mWvqqqOUJ0ILFZKuQDHgYcoe8NYqpQaDSQBw6u4DSGEg5s5ezfeScWYmnoyfkwHe5fjEKoU7lrrPUCXCp7qU5X1CiHqjwVLEjHuzSE/xIVnn+pq73IchswtI4Swm1UbjpO9+RyF3kaeeKm73HCjGkm4CyHs4qe4sxxdcQKTq+LRl7rj7iY33KhO8jYphKhxiUcz2TL/AFaDYsTTXQjwd7d3SQ5Hwl0IUaPOpObz5fQ9uFih32NtaRQtg5RsQcJdCFFjcgpK+fA/O/Au1XQcGUP7dnLDDVuRc+5CiBpRXGrm3Td+IbigbJDSjTJIyabkyF0IYXMWq2bKm9sIzrTg1TWI22WQElpr8n/4gYJt222yfjlyF0LYlNaaf0/fTnByCcbm3jzwcDt7l2R3hTt2kPruVIp27cKrd288u3er9m1IuAshbOqd+XvwO5iPJcydx5/oUq9vuFGUsI+0qVMp2LIFp5AQwl7+J37DhtlkWxLuQgibmbN8P8btmZh8nRn/YjcMhvoZ7CVHjpA2fQZ5GzZg9PMj5Lnn8L9nJAY3N5ttU8JdCGETn248Rt7GFAzuRsb+rTsurvUvbkpPnyZ95kxyVq3G4OlJ0MQJBIwahdHLy+bbrn//2kIIm1u3PZkTK07gbjRw/3Nd8apnd1IynT9P+vvvk71sOcrJicDRDxMwejRO/jV3S2kJdyFEtdpyMJWtCw4SpA0MmdSRoHBPe5dUY8xZWWTM/YCs//0PbbXif9ddBD72KM4hNd+fX8JdCFFt9iZls2rWXqIsBnqPbk3D5jV3pGpPlrw8MufPJ/PjBViLi/EdMoSg8eNxiYq0W00S7kKIanEsNY+PpsbRvNRApzua0rZrmL1LsjlrURGZixaR8eFHWHNy8L71VoInTcS1SRN7lybhLoSoupScIt767w7aFRpodmMEPfs2tHdJNmUtLSV76eekz5mNJS0dzxuuJ2TyZNxat7Z3ab+RcBdCVElaXgl/e3srnXMgLDaQfiMcd/SpNpvJWbmK9Pfew3T2LB5duxI8bRoenTrZu7Q/kXAXQlRadmEpT0/7ha5pVnyb+DB0bDuHHKSkrVbyvvmGtOkzKD1xAre2bQl77VU8r7mm1rZXwl0IUSl5xSYmvreVzskWPEM9uGtSR4wOdiclrTX5339P2rTplBw4gGtMM6JmzsCrT59aG+q/knAXQly1olIL4+dsp91xEx4+Lox4qhMubo4VJwXbtpM2dSpFu3fjHB1NxFtv4jNgAMpotHdpV8Sx9oYQwuZKzBbGzdtBzKEivF2cGP5UJzx9HWeQUlFCAmnvTqXg559xCg0l7JVX8Bt2O8q5bt0GUMJdCHHFTBYrExfuIiIhnwBlZOikjviHOcYgpeLDh0mbPp38jZsw+vsT8sLz+I8cicG1br5xSbgLIa6Ixap5ZukePHZmE2Ex0v/RtoQ39bV3WVVWeuoUaTPfI3fNGgyengRPnoT//Q9g9Krbb1oS7kKIy9Ja87cVeyn4JZ2OZieuG9GcJh2D7V1WlZjOnSN91vtkL1+OcnYmcMwYAkc/jNHPz96lVQsJdyHEX9Ja88rq/Rz/6Rw3lDrTsV807XtH2busSjNnZpIxZy5Zn36K1hr/kSMJenQsTsF1+83qjyTchRCXpLXmjbUH2L75NAOLXYjpEkLPoU3tXValWHJzyZg/n8wFn6CLi/G9fSjB48bhHGm/+V9sScJdCFEhrTVTvj7Ihu9OMbzIlcjmfvQZ1RpVx264YS0sJHPRYjI+Kpv/xWdAf4ImTMS1SWN7l2ZTEu5CiD/RWvP2+kOs+PYEDxS7ExjhQf/H22N0rjuDlKylpWR/tpT0OXOwpKfjdeONBE+ehFurVvYurUZIuAsh/mTqxiN8suk4j5R64O3tzG0TYnF1rxtxUTb/y0rS3nsP89kUPLp1I3jGdDw6drR3aTWqbuwtIUSNmb7pCLM3HOExixfuBsVtE2Px8rfdvT6ri7Zayfv667L5X06exK19eyJefx2Pnj1r/VQBtiDhLoT4zXvfHWXa+sM8bvDGrdDCgIkdCIy0/f0+q0JrTf7mzWXzvxw8iGtMDFGz3sOrd+96Geq/knAXQgAw+/tjvPX1IR5z8cE9zcTNo9sQ2aJ230mpYOs20t59l6L4eJwbRhPx9tv4DOiPMtSdawO2IuEuhODDH48z5auDjPbyw/tMCdcMa0ZM11B7l3VJRfHxpE6dSuEvW3EKCyPstVfxGzq0zs3/YksS7kLUcx/+eJzX1x7g/gB/Ao4X0753FB36NrB3WRUqPnSItGnTyf/2W4wBAYS+9CJ+I0bU2flfbKnK4a6UMgJxwBmt9SClVADwGdAIOAncpbXOqup2hBDV7/3Nx/jP1we5OyyQsEOFNOkYTK/hMbXuXHXpyZOkzZhJ7rp1GLy8CH7iCQLuvw+DZ92e/8WWquPIfTJwAPAp//kFYJPWeopS6oXyn5+vhu0IIarR9E1HeGfDYUY0DKZhYgGhTXzp+1BrDLVokJIpJYX0WbPIXvEFysWFwEceKZv/xbfuT1hma1UKd6VUFDAQeAN4qnzxEODG8u8XAJuRcBei1tBa8+6Gw0z/9igjmofRLKEAzyB3Boxrj5NL7bgRhTk9nfS5c8n+dAkA/vfcUzb/S1CQnSurO6p65D4VeA7wvmBZqNY6BUBrnaKUCqniNoQQ1URrzZvfHOL9zccY2S6ClomFWJ0NDJoQi5un/S9GWnJyyJg3n8xPPkGXlv4+/0tEhL1Lq3MqHe5KqUFAqtZ6p1Lqxkr8/lhgLEB0dHRlyxBCXCGtNf9ad4APfjzBvZ2jaHewmNwCM7c/3QmfIHe71mYtKCBz4SIy5s3DmpuLz4ABBE2cgGtjx57/xZaqcuTeCxislBoAuAE+SqlFwHmlVHj5UXs4kFrRL2ut5wJzAbp06aKrUIcQ4jJ+nbb3459P8mCPhnQ8aeJsSiEDJ7QnONr78iuwEWtJCdmffUb6nLlYMjLw6t27bP6Xli3tVpOjqHS4a61fBF4EKD9yf0ZrfZ9S6i1gFDCl/HFl1csUQlSW1ar5+8p9LN6WxJhejeieDocPZnHTA62Ibh1ol5q02Uz2F1+QPut9zCkpePToQch7M3Hv0MEu9TgiW/RznwIsVUqNBpKA4TbYhhDiClismpdWJPBZ3Gkeu6EpNxQ7sWtbEt0HN6bVNeE1Xo+2Wsld9xXpM2ZQeuoU7rGxRPz7X3j26FHjtTi6agl3rfVmynrFoLXOAPpUx3qFEJVnslh58rM9rNmbwqSbmtHXxZMfVh6m9XURdO7fqEZr0VqT/913ZfO/HDqEa4sWRM2ahVfvG2tdn3pHISNUhXBAxSYL4xbv4tuDqbzQvyX9fH34ek4CjdoFcsPdzWs0UAt++YXUqVMpjt+LS8OGRPz3bXz6y/wvtibhLoSDySs2MWZBHNtPZvL60LbcHOLHynd3E9zQh35j2mIw1kyoFu7eTdrUaRRu24ZTeDjhr7+G79ChKCeJnZog/8pCOJCsglIenL+dfWdzmTqiAzeE+7P8zZ14+LkycFx7nF1tP0ip+OBB0qZOI3/zZoyBgYS+9BJ+d4/A4OJi822L30m4C+EgUnOLuf+j7ZzIKGDOfZ25Jsqf5W/GgYLbJsbi4WPbcC05cYL0GTPIXfcVBh8fgp98smz+Fw8Pm25XVEzCXQgHcDqzkPs+2kZaXgkfP9iVLlFlp2IKc0oZ8lRH/EJsF7CmM2dImzWLnC9XolxdCXzsUQIffhijj8/lf1nYjIS7EHXc0dR87vtwG4WlZhaN6U6HSF/WvZ9AWlIe/R9vT1hj20yyZU5LI33OXLI/+wyAgPvuJXDsWJwC7dN3XlxMwl2IOmzfmRwemLcdg1J89mhPWoZ5s3nRQU7ty+CGe1rQuH31T7Rlyc4m46N5ZC5ahC4txW/YMILGPY5zeM33mxeXJuEuRB215Wg6Yz+Jw8/DhUVjutM4yJMda0+wf0sKnfs3pO31kdW6PUt+AVkLPyFj3nys+fn4DBxI8ITxuDRqVK3bEdVDwl2IOmhV/FmeXrqHJkFeLHi4G2G+bhz4+SzbV5+gRY8wug9uUm3bspaUkPXpp2TM/QBLZiZeffoQPGkSbi2aV9s2RPWTcBeijpm/5QSvrN5Pt0YBfPBAF3w9nDmVmMF3iw7RoJU/ve9rWS2DlLTJ9Pv8L+fO4XlNT4InT8Y9NrYaWiFsTcJdiDriwrnY+7UOZfrIjrg5G0k9lcvXc/cRGOnJrY+2w+hUtUFK2mold+060mbMwJSUhHuHDkRMmYJnj+7V1BJREyTchagDTBYrL65IYNnOZO7pHs1rQ9piNChy04tY895e3DydGDQhFhe3yv+X1lqT/+23pE2dRsmRI7i2bEnU7PfxuuEGmf+lDpJwF6KWKyw1M37xLr47lMYTN8cwuU/ZDayL802snhGP1Wxl6JOd8fR1rdT6tdYU/PwzadOmU7x3Ly6NGhH57jt433KLzP9Sh0m4C1GLZRWU8tDHO9ibnM3rQ9tyX4+GAJhLLaydFU9eRjGDn+hAQLhnpdZfuGs3aVOnUrh9O04R4YS/8Qa+QwbL/C8OQPagELXU6cxCHpy/ndNZRcy6tzO3tg0Dym6+sWHefs6dyOXWR9oS0czvqtddfOBA2fwv33+PMSiI0P/7P/zuGi7zvzgQCXchaqE9p7MZs2AHpWYrCx/uRvcmZaM+tdb8tPQIx/ekce3wGJp2urr7z5ccP0HajOnkffU1Bl9fgp9+ioB775X5XxyQhLsQtcw3ieeYvGQ3wd6uLBnbk2YhXr89t3t9Egmbk+lwcwNi+zS44nWazpwh7b1Z5Hz5JQY3N4LGPU7Agw/K/C8OTMJdiFpCa828LSd5fe1+YqP8+HBUF4K8fr9Ienj7OX754hjNuoRwzbBmV7ROc1oa6bPnkLV0KUopAh54gMCxj+AUEGCrZohaQsJdiFrAYtW8ujqRBb+c4tY2Ybw7ogPuLr/PvZ58MJNNCw4QEePHzaNaowx/3TWxbP6Xj8hcuAhtNv8+/0tYmK2bImoJCXch7Kyw1MykT3ez8UAqj1zXmBf7t8JwQXinJ+fz1ewE/EI9GPB4O4zOl+6eaMkvIPOTBWTOm4+1oACf2wYRPGECLtHRNdEUUYvU6XAvKrXw/eFUejULwtvN2d7lCHHVUnOLGb0gjsSzObw2pA3392x00fN5mcWsmRmPs6uRQRNicfWo+O/cWlxM1qdLyJg7F0tWFt59byZo4kTcmsv8L/VVnQ73fWdzeGzRLqaP7Mjg2Ah7lyPEVUlIzuGRT+LILTbx4agu3NQy9KLnSwpNrJkZj6nYzO3PdMY7wO1P69AmE9nLV5A+axbm1FQ8e/Ui+InJuLdrV1PNELVUnQ73TtH+BHm5sD7xnIS7qFPW7k3h6c/3EOjpyrLHrqF1xMW9ViwmK+veTyD7fCG3TYwlKMrroue1xULumjWkzXwP0+nTuHfqRMTbb+HZrVtNNkPUYnU63I0Gxc2tQlmzN4USswVXJ9vf/FeIqrBaNdM2HWHapiN0aejP7Ps7X9QjBkBbNZsW7OfskWz6PtyaqJa/92zRWpO3YQNp06dTevQYrq1b0WDObDyvv17mfxEXqdPhDnBLmzCW7DjNz8cy6N3i6gZ0CFGTikotPP35HtYlnOPOzlG8cXvbCg9Ifv7iGEfiUul5e1Oadyvr3aK1pmDLz6RNnUrxvn24NGlC5NR38e7XT+Z/ERWq8+Hes2kgXq5OrIlPkXAXtVZKThGPfBJH4tlc/jagFWOua1zhkXb8t6fZsyGJdjdE0rFfWQ+Xwp07SXt3KoVxcThHRBD+r3/hO/g2mf9F/KU6/9fh5mxkQLsw1u5N4bWhbfBwqfNNEg5md1IWYxfupKjUwrxRXendsuKDkGO7Uvnp8yM0jg3i2hHNKd6/n7Rp0yj44UeMwUGE/v3/8Bsu87+IK+MQSXhHpyiWxiWzPvE8QztW730jhaiKJduT+MfKRMJ83fjfmO7EhHpX+LqzR7PZMG8/YY19uKG3O2effJK8b77B6OtLyDNP43/vvRjc3Wu4elGXOUS4d20UQJS/O0vjTku4i1qhxGzh5VWJfLr9NNfFBDH97o74e1Z8xJ2ZUsC6WXvx8jHSKX0VScOWl8//Mo6Ahx7E6F3xG4IQf8Uhwt1gUIzsFs1b3xzi8Pk8ml/i6EiImpCSU8Rji3YRfzqbcTc25el+LTBeYrqAgpwSVk/bBcWFtP5hCiWmbAIefJDAR8bg5O9fw5ULR+Iwl9lHdovG1cnA/C0n7V2KqMe2Hs/gthk/cfR8HrPv68Rzt7a8ZLAXnkvny79voCgjn3Y7pxE+6Eaarv+G0OeelWAXVeYQR+4AAZ4uDO0QyRe7k3n+1hb4echFJ1FztNbM33KSN9YdoGGgB0vG9qBZSMWfIC35+aTPX8C3PxvI8WlGD+89tF02F5cGVz6FrxCX4zBH7gAPXduIYpOVJTtO27sUUY8Ulpp58rM9vLpmP31ahrByfK8Kg91aXEzGR/M4enNfftqUQ6ZvC669JYhO7zwrwS6qncMcuQO0DPOhZ5NAFv5yijHXNsbJ6FDvXaIWOnw+j3GLd3EsLZ9n+jVn3I3NLprREUCXlpK9fDnps97HnJbG6esf55yhLV0HNab9oMZ2qlw4ukqnn1KqgVLqO6XUAaVUolJqcvnyAKXUBqXUkfLHGj15+FCvRpzJLmJV/Nma3Kyoh5btTGbIzC1kF5pYNLo7E26KuSjYtcVC9pdfcmzAQM698irO0dEU/e1Djhja0rpXOF0HNrJf8cLhVeXQ1gw8rbVuBfQAxiulWgMvAJu01jHApvKfa8zNrUJpHe7DtE1HMFmsNblpUU8Ulpp55vN4nvk8ng4N/Fg3+Vp6NQv67XmtNbnfrOf44CGkvPAiRh8fGnwwF/38u2z9uYSGbQO54Z4WMheMsKlKh7vWOkVrvav8+zzgABAJDAEWlL9sATC0ijVeFYNB8VTf5pzKKGTFruSa3LSoB46cz2PIzC0s35XMpD4xLBrTnRDvsql4tdbk//gjJ++4kzOTJwMQOW0ajZYvoyAqlvUfJhLUwJt+Y9pgkFOGwsaq5Zy7UqoR0BHYBoRqrVOg7A1AKWXbCV8yjkFg04sW9WkVQmwDP6ZvOsrtHaNwcZL/SKLqlu9M5v++3Ienq5GFD3fn2pjfj9YL4+JIfXcqRTt34hwZSfiUf+N7220oo5Hs1ELWvBePh48LgybE4uLmUJe6RC1V5dRTSnkBy4EntNa5V/F7Y5VScUqpuLS0tMpt/ORPMLMr/PgOaH3hunm6b3POZBfx2Y6kyq1biHL5JWaeXhrP05/H0z7Kl7WTrvst2Iv2JZL0yFhO3Xc/pqQkwv75D5p+tQ6/oUNRRiNFeaWsnhEPGm6b2AEPH+miK2pGlQ4hlFLOlAX7Yq31ivLF55VS4eVH7eFAakW/q7WeC8wF6NKli67oNZcV1Q3aDoNNr0DuWej/HzCUTaF6XUwQ3RsH8O7GIwyOjcT3ErcnE+Kv7DyVxZOf7SE5q5BJfWKYdFMznIwGSo4eJW36DPLWry+b/+XZZ/G/Z+RF87+YSiyseW8vBdklDH2yI36hHnZsiahvqtJbRgEfAQe01u9c8NQqYFT596OAlZUv7zKcXOD2uXDNJNjxASx9AExFv9bHP29rQ3ZhKe9uPGyzEoRjMlusTN14mLvm/IJVa5Y+2pOn+jbHevYMZ59/geODh1CwZQtBEybQdNNGAkc/fFGwWy1W1n+4j7RTufQb3YawJr52bI2oj6py5N4LuB9IUErtKV/2EjAFWKqUGg0kAcOrVOHlGAzQ7zXwiYSvX4BPhsLIT8EjgNYRPtzbvSELt57i7m4NaBnmc9nVCZGUUcgTn+1mV1I2wzpG8vKQNrjnZJHyyitkf74MZTQS8NCDBI6peP4XrTXfLznMyYQMbhjZnCYdgu3QClHfKa0rd0akOnXp0kXHxcVVfUWJX8KKseDfEO5bDn7RZBeW0vvtzTQP9WbJ2B7S/UxcktaaFbvO8M9ViSgFrw9ty8CGHmR88CFZixejrVb8h99J4KOP4Rx66X4CcetOsm3VcTrd0pCetze95OuEqCql1E6tdZeKnnOsbiRthsL9X0D+efiwL5xLwM/DhWdvacm2E5l8HiddI0XFsgpKmfjpbp7+PJ7W4T6sG92Ba35YwbGb+5L58cf49O9P06/WEfaPf/xlsB/8JYVtq47TvHsoPYY2qcEWCHExxwp3gEa94OFvyi6szusPxzdzd9cG9GgSwGtr9nM2u8jeFYpa5pvEc/R99we+STzH870b8p4xkaI7h5A+axae115Lk9WriJjyb1yiov5yPUn7M/hu4UGiWvpz0/2t5FOisCvHC3eAkFYwegP4RcOiOzHs+5w374jFojUvrEigNpyKEvaXXVjKE0t28+jCnYR7GFkVmUKf1x8n/b//xS22PY2WLyNq2lRcm17+1EpaUh5fz9mHf7gntz7aDqOMrRB25rijKXwj4eGvYMm9sOIRovu+ygu3DuYfq/azZMdpRnaLtneFwo427D/PS18kkJNXxJteyXRcuxzzmTO4dOlMyNSpeHTufMXryk0vYs3MeFw9nLhtYiyu7o7730rUHY79V+jmW3Zh9YvHYMM/uL/bGdY3HcIrqxPp3NBf7thUD2UVlPLamv18ses0dxUeZdShb1BJp3Bq04bwl1/G89peV3U6pbjAxJqZ8VjMVgY/0QlPP1cbVi/ElXPscAdwcoU7PgKfCNQvM/mw+VluchnJuMW7WDWhFx4ujv9PIMp6wqzcc5ZXVycSczKBT5O+xTf5OC7NmhI8fRreffte9Tlys8nCuvf3kpNexOBJHQiM8LJR9UJcvfqRbAYD3PIG+ETg9s1LfBV8juuTH+HvXyby9vD2cuHLwSVlFPK3LxPI/mUbbxzbQKOUozg3aEDwf6bgM2gQymi86nVarZqN8/aTcjSHfmPaENlcbosnapf6Ee6/6jkevMPw/eIxNvn9m8G7nuSTKF9GXdPI3pUJGzBbrHz00wlWL93IvYlf0eHcIYwhIQS//E/8hg1DuVRunhetNVs+P8Kx3Wn0urMZMV1Cq7lyIaqufoU7QNs7wDOEwCX3sNbzFe5d+yxNgu/kuhgZRehIdp7KYua89fT6YRlvpexD+foR/Pzz+I+8G4ObW5XWvWfjafZ+l0zsTQ3ocLNcmBe1U/0Ld4DG16Ee/hrfRXfwueVVJi4uJHzcozQLkXOmdV1qXjGzFn9P0LJPeCZ5N3h4EDRxIgGjRmH08qzy+o/sOM/Py4/StFMIve5sVg0VC2Eb9TPcAULbYBizEZcFw5id+S9e/yCfxyc8R7iv++V/V9Q6JouVJet2kjV7Nncc3wpOTvg99BChYyue/6UyzhzKYuOC/YQ38+Xmh1qhDHKtRtRe9TfcAXyjcH7kGwoWjODVc+8we1Y2Iyb9B39PmXO7Lvll1xF2T5lOr32bMaJxvv1OmjwxHueQ6rtPTMaZfNbNTsA3yJ0Bj7fHyfnqL8IKUZNkGJ27P56jV5HecACPlczjh5mPkFtUYu+qxBU4duIc80e/iMsDw7khYROmG/sSs/5rWvzrlWoN9vysYtbMjMfJxcBtkzrg5in3BhC1n4Q7gLMbQaMWcypmFEOKvmTvu3eQk5tv76rEJaSlZfO/J14nY/AAemz5krz2XWnw5Uq6zHoH18vM/3K1SorMrJkZT0mRmUETYvEOqNrFWCFqioT7rwwGGt4zjcPtn+fa0h9Jmn4L2RmVvP2fsInC/CK+/OdUjvbtR8evF5PbpCV+i5Zw4/8+wKdFTLVvz2K28tXsBLJSCuk/th3BDWREs6g76vc59z9SiubDXiLRM4QWPz9H8nt9KBy1goiG0ivCnkpLSvluxgI8Pp1Pi4IsTke3JOj5Z7i5Ty+bbVNbNZsWHODMoSxufrAVDVoH2GxbQtiChHsF2twyhgPeYUStH0Ph/H4cuWMJMe262busesdkMvPtnCW4LPyQ6JzzJIc0ovClf9B32C02H1W8deUxjuw4T4+hTWjRI9ym2xLCFuS0zCW0umYQGcNXYsBK6LIhbPvWdreCFRczW6ys/2g5393Qn+iZb4DRSNYLr9Nn81o633GrzYM9YXMyu75Jos31kXS6paFNtyWErciR+19o1KY7ab4byJl/Ox2+f5jVKa8wYOR4jNK/2SZMFivfLvkK85xZNEk9TrpPMBmTX+KGR0ZicKqZP9Xju9P44bPDNGofxPV3N5d5h0SdJeF+GcFRMZQ8sZmz7w9l4OH/Y+HU0/R9+GUi/GSwU3UpLDWz5rONGOfNoXXKQbI9/Ugf+xTXjB+F0bXmxhykHMth/bxEQhv50G9MGwzyJi7qMAn3K+DqHUSjJ9ZzZt79jDo3m4+nniH49v8wMDbS3qXVaRn5JSxfthm3RR/RNTmBAncvch4aT9dJY3Byr9kuh1nnClg7Kx4vP1cGjmuPs4sMUhJ1m4T7FVIuHkSNXUruF0/xYMLHrFqWznMHXuPF22JlROtVOnQujxWrt+K/9GOuO72bUld3Skc9QseJj1bL/C9XqyCnhNUz4jEYFLdNisXdW/anqPsk3K+GwYjPsKlYghsy+NtXCN4/iSGHn2fCgM7c2SlKPsb/BZPFyvrE83y5fhetNnzObUk7sDo543TvA7Sc+BhGPz+71FVabGbte3spyitl6FOd8A32sEsdQlQ3VRtuFt2lSxcdFxdn7zKuTvwS9MrxnDI0YET+0zRo2JRXhrShTYSvvSurVZIyClm28zTrftzPTbu+YtDJXzAq8LpjOJETHscp2H5TLVssVtbN2svpA1kMeLwdjdoF2a0WISpDKbVTa92loufkyL2yYu9GeYXQ8LP7+dbvdR5IfY6B07MY2D6cp/o2p2lw/Z0+uKDEzFf7zvF53Gn2HTrDncc289/jP+FsMeE7dCgh48fhHGnf6xVaazYvPkRSYia972spwS4cjhy5V1VKPCwejjYVs6TZm7yW4EexycKwTlE8dkPTejNHfKnZyo9H0li7N4VvEs9hLizkwXPbGJi4CeeiAnwG9CdowkRcmzS2d6kAbF99nB1rT9JlYCO639bE3uUIUSl/deRep8P9ZM5J/r7l7wS4BRDgHlD26BZAoFtg2aN72aOvqy8GZcPxWlmnYNEdkJ1E7sBZTDvbmoVbT1FqtnJji2BGX9uYa5sFOVyf6VKzlS3H0n8L9LxiMwHOMLEwgW4/r8aQlYnXjTcSPHkSbq1a2bvc3+z/6SzfLTpIy2vCuen+lg63X0T94bDhfjTrKFO2TyGjOIPM4kyyS7KxauufXmdQBvxd/X97A/hj+F/4FegeiLtTJfqwF2bC/0ZA8g7o/x/SWj/I/7YlsXDrKdLzS2ga7MkdnaMY2iGyTveRP59bzOZDqXx7MJWfjqRTUGrB282JW1oEc2d6PIErFmJOScGjWzeCn3wCj44d7V3yRU4mpLPu/QQatPJnwLj2GI0ySFvUXQ4b7n9ksVrIKc0hsyiTzOLM30I/o6js8cKvjKIMCs2FFa7H3cn9ojeBP74pXPgpwc/VDydD+aULUxEsGw2H1kKvydDnZUqsmtXxKXy6PYmdp7JQCno0DuS22Ah6twyu9Xd+yikyEXcyk20nMtlyNJ3Es7kAhPu60btlCH2aB9HhWBzZs2ZRevIkbu3bE/LEZDx69qx1R8Spp3L54r+78A/zZOhTHXFxk0tOom6rN+F+tYrMRWQVZ10U+Be+Kfz6JvHrl0Vb/rQOhcLP1e/3TwGu/gSc309ASgIBYR0J6D6eQM9QAt0CyS9y5eu9Wazcc5aTGWVvLK3CfbipZTA9mgTSMdofL1f7BY7FqjmRns++M7nEJ2ez7XgmB87lojW4GA10iPbjxhbB3NQyhOYhXhRs/p60adMoOXQI15gYgp98Aq/evWtdqAPkpBWx/M04nFyM3PFcZzx9Xe1dkhBVJuFeDazaSl5pHhlFGb+H/69ff/ikkFmUSZ4pr8L1uBpdCXALwMPoi9nkSXaeK+k5LljMnmDxooFPMK1DI2gdGkFseBStw/2rfZCU2WIlOauIkxkFnEwv4Hh6AYlnc9l/NpciU9kbmJuzgU7R/nRvHEi3xgF0jPbDrfzWcgVbt5L27lSK4uNxbhhN8MRJ+AzojzLUzlMcRXmlLH9rJ8UFJu54tjP+YTU/UEoIW5CukNXAoAz4uvri6+pLEy7fu6LUUkpm3EdkfvcKmf4NybhmHJnK+vunhOIMMosyKVbJuLtkYLaaAUgDvi+A748Dx0GbPVBWL1yUD55Ofvi6+OPr6o+/6+/XCHxd/PFx9sfT2QurhhKzhWKThaJSC1mFJtLzS0jPLyEjv5S0/BLOZBVhtv7+pu7l6kSrcG9GdG1Au0hf2kb60jTYE6c/nI8uio8ndepUCn/ZilNYGGGvvYrf0KEo59p72zlTqYW1s/aSn1XCkCc6SrCLekOO3G3t6Eb47AHwCIT7lkNw8z+9RGtNninv908ARRmcyDrPscxznM5JJaMogzxTNkXWHMzkgbHiawVaG9FmT7TZG23xRJu90BYv3Aw+eDv74eda9mbQyC+UFsHhNAv2o1GQB8Fern95KqX40CHSpk4j/7vvMAYEEPTYo/iNGIHBtXaf2rBaNV/PSeDE3nT6j21Hk472GzAlhC3IaRl7O7sbFg8HqxlGLoHoHlVaXamllLN5GZzOSeVcfhpZJVlkl2SSU5JFrimLfFM2OaYsckuzyCrOpNRaWuF6vJ29/9yF9MKf00rw/mQt1o0/YvDyInD0aALuvw+DZ+0/+tVa88Onh9n3wxmuG9Gc9r2r996qQtQGdgl3pdStwDTACHyotZ5yqdc6fLgDZJ4o6wufewbu+AhaDaqRzWqtKTQXkll0Qe+h8lNCf+xBlFmcSVZxFgE5Vu7cYuXGvRqTE6zrqviquwsu/hd0G71Mt1I3J/veSHrn1yfZ+uVxOvaL5pphcptE4ZhqPNyVUkbgMNAXSAZ2ACO11vsren29CHeAggz4311wdhf0fxO6PWLvii5iTk8nbfZssj9bCmhKBvfm3LBepLub/vSm8OsbRZG5qMJ1eTh5XHIcwR+7lfq6+GI0VN8Uu4e2prDx4wPEdA2l70OtUTKhm3BQ9rig2g04qrU+Xl7AEmAIUGG41xuegTBqNSx7GNY9A7lnoc8/wM5dBy05OWR8NI/MhQvRpaX4DbudoMcfxzki4rK/W2gqJKsk66JPBn8cW3Am/wx70/aSVZJ1yUFmfq5+F50a+i38K/ik4OF86ZkbTx/I5NtPDhLZwo8+D7SSYBf1lq3CPRI4fcHPyUB3G22rbnHxgBGLYO1T8NM7kJcCg2eAseZ7nFgLCshcuJCMj+ZhzcvDZ+BAgidOwKVRoyteh4ezBx7OHkR6XX4iMKu2klOS86ceQ38cV5CYnkhmcSb5pvwK1/PrILM/fvnlh1K4PATXIAMxI9zJMmfiZ7xgkJkQ9Yit/uorOly66PyPUmosMBYgOjraRmXUUkYnuG0a+EbBd29A/nm46xNw9a6RzVtLSshesoT0OXOxZGbiddNNZfO/tGhh0+0alAF/N3/83fxpStPLvr7EUvLnMQR/GFdwvvA8BzIOUJJjZfDeiWiVzSdR7zJ1Qw5QNsjM19X3TxeLL7yIfOHpI09nz1o5CEuIq2Wrc+49gZe11reU//wigNb63xW9vt6cc6/IroWwejKEtoF7l4F3qM02pU0msr/8kvT3ZmE+dw6Pnj0ImTwZ9w4dbLbNmlBcYGLF2zvJzy6hx2NhmPzyLznlxK9vCnmlFQ8yczG4VNiD6E+nicq/nO3wiUuIX9njgqoTZRdU+wBnKLugeo/WOvESr08DTlViU0FAemXrrMPqY7ulzfVHfWx3ZdvcUGtd4QAOm5yW0VqblVITgG8o6wo571LBXv76So0uUUrFXepdy5HVx3ZLm+uP+thuW7TZZleatNbrgHW2Wr8QQohLq50zPQkhhKiSuh7uc+1dgJ3Ux3ZLm+uP+tjuam9zrZhbRgghRPWq60fuQgghKiDhLoQQDqjOhrtS6lal1CGl1FGl1Av2rsdWlFInlVIJSqk9Sqm48mUBSqkNSqkj5Y/+9q6zqpRS85RSqUqpfRcsu2Q7lVIvlu/7Q0qpW+xTddVcos0vK6XOlO/vPUqpARc85whtbqCU+k4pdUAplaiUmly+3GH39V+02bb7Wmtd574o6zt/DGgCuADxQGt712Wjtp4Egv6w7E3ghfLvXwD+Y+86q6Gd1wOdgH2XayfQunyfuwKNy/8WjPZuQzW1+WXgmQpe6yhtDgc6lX/vTdlgx9aOvK//os023dd19cj9t1kntdalwK+zTtYXQ4AF5d8vAIbar5TqobX+Acj8w+JLtXMIsERrXaK1PgEcpexvok65RJsvxVHanKK13lX+fR5wgLKJBh12X/9Fmy+lWtpcV8O9olknLz8tYd2kgfVKqZ3lk60BhGqtU6DsDwcIsVt1tnWpdjr6/p+glNpbftrm19MTDtdmpVQjoCOwjXqyr//QZrDhvq6r4X7ZWScdSC+tdSegPzBeKXW9vQuqBRx5/78PNAU6ACnAf8uXO1SblVJewHLgCa117l+9tIJldbLdFbTZpvu6roZ7MtDggp+jgLN2qsWmtNZnyx9TgS8o+3h2XikVDlD+mGq/Cm3qUu102P2vtT6vtbZora3AB/z+cdxh2qyUcqYs5BZrrVeUL3bofV1Rm229r+tquO8AYpRSjZVSLsDdwCo711TtlFKeSinvX78H+gH7KGvrqPKXjQJW2qdCm7tUO1cBdyulXJVSjYEYYLsd6qt2vwZcudsp29/gIG1WZZPlfwQc0Fq/c8FTDruvL9Vmm+9re19JrsIV6AGUXXU+BvzN3vXYqI1NKLtqHg8k/tpOIBDYBBwpfwywd63V0NZPKftoaqLsyGX0X7UT+Fv5vj8E9Ld3/dXY5oVAArC3/D95uIO1+VrKTjHsBfaUfw1w5H39F2226b6W6QeEEMIB1dXTMkIIIf6ChLsQQjggCXchhHBAEu5CCOGAJNyFEMIBSbgLIYQDknAXQggH9P89ZS8KT3RPjwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(kwh, f3(kwh))\n", + "def df3(x):\n", + " return 0.5 * np.log(x/150) + 0.5\n", + "for x_0 in [20, 50, 100, 200]:\n", + " plt.plot(kwh, f3(x_0) + df3(x_0) * (kwh - x_0))\n", + " print(f'Function en {x_0}: {f3(x_0):.3f} + {df3(x_0):.3f} * (x - {x_0})')\n", + "plt.ylim([-1, 100])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "Formule un modelo general de optimización lineal que le permita a La Lechera Ramírez satisfacer la demanda de sus clientes, al menor costo posible. Para esto usted debe seguir los siguientes pasos: " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Formulación\n", + "\n", + "**1.** Escriba lo(s) conjunto(s), parámetro(s) y variable(s) de decisión que utilizará en el modelo. \n", + "\n", + "### Conjuntos\n", + "- $P$: Plantas\n", + "- $D$: Distribuidores\n", + "\n", + "### Parámetros\n", + "- $b_i$: oferta de leche de la planta $i\\in P$\n", + "- $t_j$: demanda de leche del distribuidor $j\\in D$ \n", + "- $c_{ij}$: costo de envío de un litro de leche de la planta $i\\in P$ al distribuidor $j\\in D$\n", + "\n", + "### Variables de decisión\n", + "- $x_{ij}$: cantidad (en litros) de leche que van de la planta $i\\in P$ al distribuidor $j\\in D$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Restricciones\n", + "**2.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que se debe respetar la oferta de las plantas. \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align}\n", + "\\sum_{j\\in D}x_{ij} &\\le b_i, &&\\forall i\\in P.\n", + "\\end{align}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que se debe satisfacer la demanda de los distribuidores. \n", + "\n", + "$$\n", + "\\begin{align}\n", + "\\sum_{i\\in P}x_{ij} &\\ge t_j, &&\\forall j\\in D.\n", + "\\end{align}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**4.** Escriba la(s) restricción(es) que describe(n) matemáticamente el tipo de variable(s) que está utilizando dentro del modelo. \n", + "\n", + "$$\n", + "\\begin{align}\n", + "x_{ij} & \\ge 0, &&\\forall i\\in P,j\\in D.\n", + "\\end{align}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Función Objetivo\n", + "**5.** Escriba la función objetivo.\n", + "\n", + "$$\n", + "\\text{minimizar } \\sum_{i\\in P}\\sum_{j\\in D}x_{ij}c_{ij}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Formulación matemática completa" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Conjuntos:**\n", + "- $P$: Plantas\n", + "- $D$: Distribuidores\n", + "\n", + "**Parámetros:**\n", + "- $b_i$: oferta de leche de la planta $i\\in P$\n", + "- $t_j$: demanda de leche del distribuidor $j\\in D$ \n", + "- $c_{ij}$: costo de envío de un litro de leche de la planta $i\\in P$ al distribuidor $j\\in D$\n", + "\n", + "**Variables de decisión:**\n", + "- $x_{ij}$: cantidad (en litros) de leche que van de la planta $i\\in P$ al distribuidor $j\\in D$\n", + "\n", + "**Modelo:**\n", + "\n", + "$$\n", + "\\text{minimizar } \\sum_{i\\in P}\\sum_{j\\in D}x_{ij}c_{ij} \\text{ (1)} \n", + "$$\n", + "\n", + "Sujeto a,\n", + "\n", + "$$\n", + "\\begin{align*}\n", + "\\sum_{j\\in D}x_{ij} &\\le b_i, &&\\forall i\\in P; &(2)\\\\\n", + "\\sum_{i\\in P}x_{ij} &\\ge t_j, &&\\forall j\\in D; &(3)\\\\\n", + "x_{ij} & \\ge 0, &&\\forall i\\in P,j\\in D. &(4)\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "La función objetivo (1) minimiza los costos totales. Las restricciones (2) garantizan que se debe respetar la oferta de las plantas. Las restricciones (3) garantizan que se debe satisfacer la demanda de los distribuidores. Las restricciones (4) describe la naturaleza de la variable $x_{ij}$. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Implementación\n", + "**6.** Resuelva el modelo planteado utilizando la librería de PulP en Python. ¿Cuál es la solución\n", + "óptima del problema? " + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Estado (optimizador): Optimal\n", + "\n", + "Transporte - Costos totales = $ 1224800.0\n", + "\n", + "Variables de decisión\n", + " \tD1\tD2\tD3\tD4\tD5\tD6\tD7\tD8\n", + "Planta 1\t0\t600\t0\t0\t0\t260\t640\t0\t\n", + "Planta 2\t930\t0\t270\t0\t0\t0\t0\t0\t\n", + "Planta 3\t0\t0\t190\t0\t830\t200\t0\t180\t\n", + "Planta 4\t0\t0\t0\t610\t0\t0\t0\t60\t\n" + ] + } + ], + "source": [ + "#se importa la libreria de PulP\n", + "import pulp as lp\n", + "\n", + "#-----------------\n", + "# Conjuntos\n", + "#-----------------\n", + "#Plantas\n", + "P=[\"Planta 1\",\n", + " \"Planta 2\",\n", + " \"Planta 3\",\n", + " \"Planta 4\"]\n", + "\n", + "#Distribuidores\n", + "D=[\"Distribuidor 1\",\n", + " \"Distribuidor 2\",\n", + " \"Distribuidor 3\",\n", + " \"Distribuidor 4\",\n", + " \"Distribuidor 5\",\n", + " \"Distribuidor 6\",\n", + " \"Distribuidor 7\",\n", + " \"Distribuidor 8\"]\n", + "\n", + "# Conjunto con todas las duplas (planta, distribuidor)\n", + "P_x_D = [(planta, distribuidor) for planta in P for distribuidor in D] \n", + "\n", + "#-----------------\n", + "# Parámetros\n", + "#-----------------\n", + "b={#planta: oferta de la planta i\n", + " \"Planta 1\":1500,\n", + " \"Planta 2\":1200,\n", + " \"Planta 3\":1400,\n", + " \"Planta 4\":1000} \n", + "\n", + "t={#distribuidor: demanda del distribuidor j\n", + " \"Distribuidor 1\":930,\n", + " \"Distribuidor 2\":600,\n", + " \"Distribuidor 3\":460,\n", + " \"Distribuidor 4\":610,\n", + " \"Distribuidor 5\":830,\n", + " \"Distribuidor 6\":460,\n", + " \"Distribuidor 7\":640,\n", + " \"Distribuidor 8\":240} \n", + "\n", + "c={#(planta, distribuidor): costo de envio de un litro de leche desde la planta i al distribuidor j\n", + " (\"Planta 1\",\"Distribuidor 1\"):650,\n", + " (\"Planta 1\",\"Distribuidor 2\"):125,\n", + " (\"Planta 1\",\"Distribuidor 3\"):1200,\n", + " (\"Planta 1\",\"Distribuidor 4\"):340,\n", + " (\"Planta 1\",\"Distribuidor 5\"):150,\n", + " (\"Planta 1\",\"Distribuidor 6\"):260,\n", + " (\"Planta 1\",\"Distribuidor 7\"):350,\n", + " (\"Planta 1\",\"Distribuidor 8\"):800,\n", + " (\"Planta 2\",\"Distribuidor 1\"):250,\n", + " (\"Planta 2\",\"Distribuidor 2\"):200,\n", + " (\"Planta 2\",\"Distribuidor 3\"):250,\n", + " (\"Planta 2\",\"Distribuidor 4\"):600,\n", + " (\"Planta 2\",\"Distribuidor 5\"):150,\n", + " (\"Planta 2\",\"Distribuidor 6\"):950,\n", + " (\"Planta 2\",\"Distribuidor 7\"):1050,\n", + " (\"Planta 2\",\"Distribuidor 8\"):1000,\n", + " (\"Planta 3\",\"Distribuidor 1\"):600,\n", + " (\"Planta 3\",\"Distribuidor 2\"):350,\n", + " (\"Planta 3\",\"Distribuidor 3\"):400,\n", + " (\"Planta 3\",\"Distribuidor 4\"):260,\n", + " (\"Planta 3\",\"Distribuidor 5\"):150,\n", + " (\"Planta 3\",\"Distribuidor 6\"):300,\n", + " (\"Planta 3\",\"Distribuidor 7\"):450,\n", + " (\"Planta 3\",\"Distribuidor 8\"):600,\n", + " (\"Planta 4\",\"Distribuidor 1\"):450,\n", + " (\"Planta 4\",\"Distribuidor 2\"):800,\n", + " (\"Planta 4\",\"Distribuidor 3\"):650,\n", + " (\"Planta 4\",\"Distribuidor 4\"):250,\n", + " (\"Planta 4\",\"Distribuidor 5\"):340,\n", + " (\"Planta 4\",\"Distribuidor 6\"):700,\n", + " (\"Planta 4\",\"Distribuidor 7\"):600,\n", + " (\"Planta 4\",\"Distribuidor 8\"):620} \n", + "\n", + "#-------------------------------------\n", + "# Creación del objeto problema en PuLP\n", + "#-------------------------------------\n", + "#Crea el problema para cargarlo con la instancia \n", + "problema=lp.LpProblem(\"Transporte\",lp.LpMinimize)\n", + "\n", + "#-----------------------------\n", + "# Variables de Decisión\n", + "#-----------------------------\n", + "x=lp.LpVariable.dicts('x',P_x_D,lowBound=0,cat='Continuous') #litros de leche que van de la planta i al distribuidor j;\n", + " #aca se añade de una vez la naturaleza de las variables\n", + "\n", + "#-----------------------------\n", + "# Función objetivo\n", + "#-----------------------------\n", + "#Crea la expresión de minimización de costos\n", + "problema+=lp.lpSum(x[i,j]*c[i,j] for i in P for j in D), \"Costos Totales\"\n", + "\n", + "#-----------------------------\n", + "# Restricciones\n", + "#-----------------------------\n", + "#sum(j in D)x_ij <= b_i forall i in P\n", + "for i in P:\n", + " problema+= lp.lpSum(x[i,j] for j in D) <= b[i], \"Oferta de la planta \"+i #se respeta la oferta de cada planta \n", + "\n", + "#sum(i in P)x_ij >= t_j forall j in D\n", + "for j in D:\n", + " problema+= lp.lpSum(x[i,j] for i in P) >= t[j], \"Demanda del distribuidor \"+j #se satisface la demanda de cada distribuidor \n", + " \n", + "#-----------------------------\n", + "# Imprimir formato LP\n", + "#-----------------------------\n", + "#Escribe el problema en un archivo con formato LP \n", + "problema.writeLP(\"Transporte.lp\")\n", + "\n", + "#-----------------------------\n", + "# Invocar el optimizador\n", + "#-----------------------------\n", + "#Optimizar el modelo con CBC (default de PuLP)\n", + "problema.solve()\n", + "\n", + "#-----------------------------\n", + "# Imprimir resultados\n", + "#-----------------------------\n", + "#Imprimir estado final del optimizador\n", + "print(\"Estado (optimizador):\", lp.LpStatus[problema.status],end='\\n')\n", + "\n", + "#Valor óptimo del plan de transporte \n", + "print(\"\\nTransporte - Costos totales = $\", round(lp.value(problema.objective),2))\n", + "print()\n", + "\n", + "#Imprimir variables de decisión\n", + "print(\"Variables de decisión\")\n", + "print(\" \",\"D1\",\"D2\",\"D3\",\"D4\",\"D5\",\"D6\",\"D7\",\"D8\",sep='\\t')\n", + "for i in P:\n", + " print(i,end='\\t')\n", + " for j in D: \n", + " print(round(x[i,j].value()),end='\\t')\n", + " print()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Créditos\n", + "\n", + "Equipo de Optimización
\n", + "Instancia: Camilo Aguilar, Juan Felipe Rengifo
\n", + "Fecha: 20/09/2020" + ] + } + ], + "metadata": { + "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.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} From 77f53f1df53428e1ddfbf0732fb047946d0473cf Mon Sep 17 00:00:00 2001 From: Daniel Duque Date: Tue, 21 Dec 2021 01:00:31 -0500 Subject: [PATCH 2/9] Enunciado completo. --- optimizacion/Soluciones/CryptOR.ipynb | 222 +++++++++++++++----------- 1 file changed, 126 insertions(+), 96 deletions(-) diff --git a/optimizacion/Soluciones/CryptOR.ipynb b/optimizacion/Soluciones/CryptOR.ipynb index 430c242..89ab6e0 100644 --- a/optimizacion/Soluciones/CryptOR.ipynb +++ b/optimizacion/Soluciones/CryptOR.ipynb @@ -19,42 +19,38 @@ "metadata": {}, "source": [ "## Enunciado\n", - "CryptOR is una compañía que se dedica a minar criptomonedas. El mayor problema de planeación para CryptOR es la compra de energía. Dado el alto consumo de energía, CryptOR debe negociar contratos anuales con las diferentes empresas de generación eléctrica. El costo por kilovatio-hora (kWh) varía según la cantidad de energía contratada y la empresa generadora. La tabla 1 indica la función de costo por kilovatio-hora para cada empresa generadora. " + "CryptOR is una compañía que se dedica a minar criptomonedas. El mayor problema de planeación para CryptOR es la compra de energía. Dado el alto consumo de energía, CryptOR debe negociar contratos para los proximos 12 meses con las diferentes empresas de generación eléctrica. El costo por kilovatio-hora (kWh) varía según la cantidad de energía contratada y la empresa generadora. El costo total en función del consumo esta representado por funciones no lineales suministradas por cada generadora. Asi mismo, cada empresa generadora establece la duración de cada contrato que se firme con la misma. Los contratos se pueden renovar durante los 12 meses de planeacion, pero en ningun mes se puede firmar mas de un contrato por generadora. El consumo máximo mensual es de 250 kWh para cada generadora. Finalmente, se conoce un pronostico de la demanda de energia en kWh. Las Tablas 1 y 2 resumen toda la informacion disponible. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### Tabla 1. Cost de energía for $x$ kilovatios-hora.\n", + "### Tabla 1. Terminos de los contratos para cada generadora.\n", "\n", - "| |**Función de costo**|\n", - "|:----------:|----------:|\n", - "|**Carbon**|$c(x) = 0.0012 x^2$ |\n", - "|**Solar**|$c(x) = 0.0028 x^2 - 0.5x + 35$|\n", - "|**Eólica**|$c(x) = 0.5 x log(\\frac{x}{150}) + 30$" + "| |**Función de costo** | **Duración del contrato**| **Consumo máximo mensual**|\n", + "|:-------------------:|:----------------------------------------:|:------------------------:|:-------------------------:|\n", + "|**Generadora Carbón**|$f_1(x) = 0.0012 x^2$ | 2 meses | 250 kWh |\n", + "|**Generadora Solar** |$f_2(x) = 0.0028 x^2 - 0.5x + 35$ | 4 meses | 250 kWh |\n", + "|**Generadora Eólica**|$f_3(x) = 0.5 x log(\\frac{x}{150}) + 30$ | 3 meses | 250 kWh |\n", + "\n", + "### Tabla 2. Demanda mensual en kWh.\n", + "\n", + "|Mes| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12|\n", + "|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|\n", + "|demanda| 350| 500| 500| 600| 700| 500| 600| 400| 400| 400| 400| 400|" ] }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 26, "metadata": {}, "outputs": [ { "data": { + "image/png": "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", "text/plain": [ - "[]" - ] - }, - "execution_count": 62, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" + "
" ] }, "metadata": { @@ -66,82 +62,70 @@ "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", - "kwh = np.arange(1,250)\n", - "# TODO add subplots\n", + "\n", "def f1(x):\n", + " # Función de costo de la generadora carbón\n", " return 0.0012 * (x ** 2)\n", "def f2(x):\n", + " # Función de costo de la generadora solar\n", " return 0.0028 * x ** 2 - 0.5*x + 35\n", "def f3(x):\n", + " # Función de costo de la generadora eólica\n", " return 0.5 * x*np.log(x/150) + 30\n", - "plt.plot(kwh, f1(kwh))\n", - "plt.plot(kwh, f2(kwh))\n", - "plt.plot(kwh, f3(kwh))\n" + "\n", + "# Puntos de evaluacion de la función\n", + "kwh = np.arange(1,250)\n", + "\n", + "fig, axs = plt.subplots(1,3, sharey=False, sharex=True, figsize=(15,5))\n", + "axs[0].plot(kwh, f1(kwh))\n", + "axs[1].plot(kwh, f2(kwh))\n", + "axs[2].plot(kwh, f3(kwh))\n", + "for ax_ix, ax in enumerate(axs):\n", + " ax.set_xlabel(\"Consumo en kWh\")\n", + " ax.set_ylabel(f\"f {ax_ix+1} (x)\")\n", + " ax.set_ylim([0,100])\n", + "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "TODO: linearizar" + "## Linealización a trozos\n", + "\n", + "Optimizar utilizando las funciones $f_1(x)$, $f_2(x)$ y $f_3(x)$ es computacionalmente más difícil debido a son funciones no lineales. Sin embrago, dado que son funciones [convexas](https://es.wikipedia.org/wiki/Funci%C3%B3n_convexa) es posible aproximarlas con multiples funciones lineales. Dada una función convexa $f(x)$, la funcion $g(x;x_0) = f(x_0) + f'(x_0) * (x-x0)$ es una aproximación de [primer orden](https://es.wikipedia.org/wiki/Serie_de_Taylor), la cual es exacta en $x_0$ y se degrada a medida que $x$ se aleja de $x_0$. Con esta idea en mente, cualquier función convexa se puede aproximar generando multiples funciones de forma $g(x;x_0)$ para diferentes valores de $x_0$. La siguiente celda muestra la funcion $f(x) = (x - 4)^2$ (en azul) y su aproximación utilizando 4 rectas correspondientes a $g(x;x_0)$ para $x_0=0,2,4,5$." ] }, { "cell_type": "code", - "execution_count": 69, + "execution_count": 44, "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "(-1.0, 100.0)" - ] - }, - "execution_count": 69, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "Función evaluada en 0: 16.000 + -8.000 * (x - 0)\n", + "Función evaluada en 2: 4.000 + -4.000 * (x - 2)\n", + "Función evaluada en 4: 0.000 + 0.000 * (x - 4)\n", + "Función evaluada en 5: 1.000 + 2.000 * (x - 5)\n" + ] }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.plot(kwh, f1(kwh))\n", - "for x_0 in [20, 50, 100, 200]:\n", - " plt.plot(kwh, f1(x_0) + 0.0012*2 * x_0 * (kwh - x_0))\n", - " print(f'Function en {x_0}: {f1(x_0):.3f} + {df1(x_0):.3f} * (x - {x_0})')\n", - "plt.ylim([-1, 100])" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "metadata": {}, - "outputs": [ { "data": { "text/plain": [ - "(-1.0, 100.0)" + "(-1.0, 20.0)" ] }, - "execution_count": 70, + "execution_count": 44, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA28AAAEvCAYAAADSCPm5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAAsTAAALEwEAmpwYAABmKElEQVR4nO3dd3zV9fXH8dc3m0AGSRhhJEDC3ohsEQGVqdZZFax71GqH/hxd1rZWq9VatVptrQP3qgo4ASeCgKggIxBGWGEkISF73c/vj8P1JoA4GDc3eT8fj/vIvd/vzc0nJNzcc8/5nOM55xAREREREZGGLSzYCxAREREREZFvp+BNREREREQkBCh4ExERERERCQEK3kREREREREKAgjcREREREZEQoOBNREREREQkBEQEewF1paSkuE6dOgV7GSIiIiIiIkHx2Wef5TnnWh3oXIMK3jp16sSSJUuCvQwREREREZGg8Dwv55vOqWxSREREREQkBCh4ExERERERCQEK3kREREREREKAgjcREREREZEQoOBNREREREQkBCh4ExERERERCQEK3kREREREREKAgjcREREREZEQoOBNREREREQkBCh4+xa7iit5csFGKqprg70UERERERE5DLbsLmPGgo3BXsb3FhHsBTR0byzP5ZbXV/DAvGwuH92F84em0ywqPNjLEhERERGR72ljXikPvp/NK0u3EhbmcVLvtrSJjwn2sr4zzzkX7DV8bfDgwW7JkiXBXkY9zjkWrM/n/rnZLFifT3LzKC49rgvTh6fTIlqxr4iIiIhIQ5e9s5h/vreO177YSmR4GOcOSeOK47uQmtAs2Evbj+d5nznnBh/wnIK3727JxgLum5fNh2t2kRgbycUjO/OTEZ1IaBYZ7KWJiIiIiMg+VuXu4YF52bzxVS4xEeFMG5bGZaO70Dqu4WbbFLwdZl9sLuSBeWuZs2oncdERXDiyExeP7EzL5lHBXpqIiIiISJO3fEsR989byzsrd9AiOoILhqdzyajOJLeIDvbSvpWCtyNkxbYiHpiXzZtfbad5VDjThqdz2XFdSAmBXwoRERERkcZm6abd3D93Le9l7SI+JoKLRnbmopGdSIwNnSSLgrcjbM2OYh6Yl82sZduIigjjvCHpXHF8l5Da/CgiIiIiEqo+XZ/P/fOy+Tg7j5axkV/3qIiPCb3tTQrejpL1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QnY2rFxpg8IHDLDzv/2tZeEuuwxefx3KyoK52iZLZZMiIiIiIhLgedCzp138xo6FrVvh+efhP/+BmBg4+2x44ongrbMJUvAmIiIiIiIH598DV1UFH35oYwhiYuycc3D66dC/v91n0KBAoxQ5rDQqQEREREREfriiIpg0CRYssECuXTsbQ3DFFRbIyfeiUQEiIiIiInJkJCTA/PmwYwc8/jgMHw7PPANr19r5jRvhkUdg27ZgrrJRUNmkiIiIiIgculat4Cc/sUtlZeD47Nnws5/Z9cGDAyWYAwaovPJ7UuZNREREREQOr+hou4CNHVi2DG67DSIi4A9/gCFDYM8eO79xI5SXB2ulIUXBm4iIiIiIHDmeB337wq9/bfvitm+H116zckuACy6AlBQ49VTrZLl9e3DX24ApeBMRERERkaOndWtrcOL3u9/BhRfC55/bHLnU1ECZJVgTFAEUvImIiIiISDCdeCL885+QkwNffgl//jOMHm3n8vOhSxcrvXzzTaioCO5ag0wNS0REREREJPg8D/r1s4tfYSEMHAhPPgkPPQTNm1uw9+c/Q+/eQVtqsCh4ExERERGRhikjA155xTJu779vw8HrDgh/+21YvNi6V/br1+i7V6psUkREREREGraYGJgwIVBemZFhxz/4wPbMDRgAnTrB1VfDW2812n1yCt5ERERERCR01M2u/eUvkJtrXSoHDrQh4b/6VeA+771nw8MbCc81oKh08ODBbsmSJcFehoiIiIiIhKLycti0Cbp3h6oqGxxeXGxz5fzDwfv2bdDllZ7nfeacG3ygc8q8iYiIiIhI49CsmQVuAJGRtk/uD3+A2lr47W+hf39rdhKi1LBEREREREQaH8+zUsqBA+H3v4dt22D2bBg2LNgr+8EUvImIiIiISOPXrp0NAQ9hKpsUEREREREJAQreREREREREQoCCNxERERERkRCg4E1ERERERCQEKHgTEREREREJAQreREREREREQoCCNxERERERkRCg4E1ERERERCQEKHgTEREREREJAQreREREREREQoCCNxERERERkRDgOeeCvYaveZ63C8gJ9jqamBQgL9iLkO9MP6/Qo59Z6NHPLPToZxZa9PMKPfqZHV3pzrlWBzrRoII3Ofo8z1vinBsc7HXId6OfV+jRzyz06GcWevQzCy36eYUe/cwaDpVNioiIiIiIhAAFbyIiIiIiIiFAwZs8EuwFyPein1fo0c8s9OhnFnr0Mwst+nmFHv3MGgjteRMREREREQkByryJiIiIiIiEAAVvTZzneXd5nrfa87xlnuf9z/O8xGCvSQ7M87wJnudleZ6X7XneTcFejxyc53kdPc97z/O8VZ7nrfA87+fBXpN8O8/zwj3P+9zzvFnBXot8O8/zEj3Pe2nv37FVnucND/aa5OA8z/vl3ufErzzPe9bzvJhgr0nq8zzvv57n7fQ876s6x5I8z3vX87y1ez+2DOYamzIFb/Iu0Mc51w9YA9wc5PXIAXieFw78E5gI9ALO9TyvV3BXJd+iBrjOOdcTGAZcrZ9ZSPg5sCrYi5Dv7B/AW865HkB/9LNr0DzPaw9cCwx2zvUBwoEfB3dVcgCPAxP2OXYTMNc51xWYu/e2BIGCtybOOfeOc65m782FQIdgrke+0RAg2zm33jlXBTwHnBrkNclBOOdynXNL914vxl5Utg/uquRgPM/rAEwG/hPstci38zwvHhgNPArgnKtyzhUGdVHyXUQAzTzPiwBigW1BXo/swzn3IVCwz+FTgSf2Xn8COO1orkkCFLxJXRcDbwZ7EXJA7YHNdW5vQYFAyPA8rxMwEPg0yEuRg7sXuAHwBXkd8t10AXYBj+0tdf2P53nNg70o+WbOua3A34BNQC5Q5Jx7J7irku+ojXMuF+zNSaB1kNfTZCl4awI8z5uzt7Z838upde7zG6zM6+ngrVQOwjvAMbWKDQGe57UAXgZ+4ZzbE+z1yIF5njcF2Omc+yzYa5HvLAIYBDzknBsIlKJSrgZt7z6pU4HOQDugued504K7KpHQEhHsBciR55wbf7Dznuf9BJgCjHOaHdFQbQE61rndAZWaNHie50VigdvTzrlXgr0eOaiRwCme500CYoB4z/Oecs7phWXDtQXY4pzzZ7RfQsFbQzce2OCc2wXged4rwAjgqaCuSr6LHZ7npTrncj3PSwV2BntBTZUyb02c53kTgBuBU5xzZcFej3yjxUBXz/M6e54XhW3wfj3Ia5KD8DzPw/birHLO3RPs9cjBOeduds51cM51wv5/zVPg1rA557YDmz3P67730DhgZRCXJN9uEzDM87zYvc+R41CTmVDxOvCTvdd/ArwWxLU0acq8yQNANPCuPY+y0Dl3ZXCXJPtyztV4nvcz4G2sO9d/nXMrgrwsObiRwHRgued5X+w99mvn3BvBW5JIo3MN8PTeN7XWAxcFeT1yEM65Tz3PewlYim3V+Bx4JLirkn15nvcsMAZI8TxvC3ALcAfwgud5l2BB+FnBW2HT5qlKTkREREREpOFT2aSIiIiIiEgIUPAmIiIiIiISAhS8iYiIiIiIhAAFbyIiIiIiIiFAwZuIiIiIiEgIUPAmIiIiIiISAhS8iYiIiIiIhAAFbyIiIiIiIiHg/wFcFbbjk0+RCgAAAABJRU5ErkJggg==", "text/plain": [ - "
" + "
" ] }, "metadata": { @@ -151,45 +135,58 @@ } ], "source": [ - "plt.plot(kwh, f2(kwh))\n", - "def df2(x):\n", - " return 2 * 0.0028 * x - 0.5\n", - "for x_0 in [20, 50, 100, 200]:\n", - " plt.plot(kwh, f2(x_0) + df2(x_0) * (kwh - x_0))\n", - " print(f'Function en {x_0}: {f2(x_0):.3f} + {df2(x_0):.3f} * (x - {x_0})')\n", - "plt.ylim([-1, 100])" + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "def f(x, orden=0):\n", + " if orden == 0:\n", + " # Función (x-4) ^ 2\n", + " return (x-4) ** 2 \n", + " else:\n", + " # Derivada evaluada en x\n", + " return 2 *(x - 4)\n", + "\n", + "# Puntos de evaluacion de la función\n", + "dominio = np.arange(-3,12)\n", + "\n", + "fig, axs = plt.subplots(1,1, sharey=False, sharex=True, figsize=(15,5))\n", + "axs.plot(dominio, f(dominio))\n", + "for x_0 in [0, 2, 4, 5]:\n", + " axs.plot(dominio, f(x_0) + f(x_0,1) * (dominio - x_0), linestyle='dashed', color='red')\n", + " print(f'Función evaluada en {x_0}: {f(x_0):.3f} + {f(x_0, 1):.3f} * (x - {x_0})')\n", + "axs.set_xlabel(\"Consumo en kWh\")\n", + "axs.set_ylabel(f\"f(x)\")\n", + "axs.set_ylim([-1,20])\n" ] }, { "cell_type": "code", - "execution_count": 76, + "execution_count": 39, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Function en 20: 9.851 + -0.507 * (x - 20)\n", - "Function en 50: 2.535 + -0.049 * (x - 50)\n", - "Function en 100: 9.727 + 0.297 * (x - 100)\n", - "Function en 200: 58.768 + 0.644 * (x - 200)\n" + "Función 1 evaluada en 20: 0.480 + 0.048 * (x - 20)\n", + "Función 1 evaluada en 50: 3.000 + 0.120 * (x - 50)\n", + "Función 1 evaluada en 100: 12.000 + 0.240 * (x - 100)\n", + "Función 1 evaluada en 200: 48.000 + 0.480 * (x - 200)\n", + "Función 2 evaluada en 20: 26.120 + -0.388 * (x - 20)\n", + "Función 2 evaluada en 50: 17.000 + -0.220 * (x - 50)\n", + "Función 2 evaluada en 100: 13.000 + 0.060 * (x - 100)\n", + "Función 2 evaluada en 200: 47.000 + 0.620 * (x - 200)\n", + "Función 3 evaluada en 20: 9.851 + -0.507 * (x - 20)\n", + "Función 3 evaluada en 50: 2.535 + -0.049 * (x - 50)\n", + "Función 3 evaluada en 100: 9.727 + 0.297 * (x - 100)\n", + "Función 3 evaluada en 200: 58.768 + 0.644 * (x - 200)\n" ] }, { "data": { + "image/png": "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", "text/plain": [ - "(-1.0, 100.0)" - ] - }, - "execution_count": 76, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" + "
" ] }, "metadata": { @@ -199,13 +196,46 @@ } ], "source": [ - "plt.plot(kwh, f3(kwh))\n", - "def df3(x):\n", - " return 0.5 * np.log(x/150) + 0.5\n", - "for x_0 in [20, 50, 100, 200]:\n", - " plt.plot(kwh, f3(x_0) + df3(x_0) * (kwh - x_0))\n", - " print(f'Function en {x_0}: {f3(x_0):.3f} + {df3(x_0):.3f} * (x - {x_0})')\n", - "plt.ylim([-1, 100])" + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "def f1(x, orden=0):\n", + " if orden == 0:\n", + " # Función de costo de la generadora carbón\n", + " return 0.0012 * (x ** 2) \n", + " else:\n", + " # Derivada evaluada en x\n", + " return 0.0012 * 2 * x\n", + "\n", + "def f2(x, orden=0):\n", + " if orden == 0:\n", + " # Función de costo de la generadora solar\n", + " return 0.0028 * x ** 2 - 0.5*x + 35\n", + " else:\n", + " # Derivada evaluada en x\n", + " return 2 * 0.0028 * x - 0.5\n", + "def f3(x, orden=0):\n", + " if orden == 0:\n", + " # Función de costo de la generadora eólica\n", + " return 0.5 * x*np.log(x/150) + 30\n", + " else:\n", + " # Derivada evaluada en x\n", + " return 0.5 * np.log(x/150) + 0.5\n", + "\n", + "# Funciones de costo\n", + "f = [f1,f2,f3]\n", + "# Puntos de evaluacion de la función\n", + "kwh = np.arange(1,250)\n", + "\n", + "fig, axs = plt.subplots(1,3, sharey=False, sharex=True, figsize=(15,5))\n", + "for i, ax in enumerate(axs):\n", + " axs[i].plot(kwh, f[i](kwh), )\n", + " for x_0 in [20, 50, 100, 200]:\n", + " axs[i].plot(kwh, f[i](x_0) + f[i](x_0,1) * (kwh - x_0), linestyle='dashed', color='red')\n", + " print(f'Función {i+1} evaluada en {x_0}: {f[i](x_0):.3f} + {f[i](x_0, 1):.3f} * (x - {x_0})')\n", + " ax.set_xlabel(\"Consumo en kWh\")\n", + " ax.set_ylabel(f\"f {i+1} (x)\")\n", + " ax.set_ylim([-1,100])\n" ] }, { From 67aba4887aa518f745c86a29904fe19e80b741db Mon Sep 17 00:00:00 2001 From: Daniel Duque Date: Tue, 21 Dec 2021 21:01:04 -0500 Subject: [PATCH 3/9] Enunciado y modelo completo para CryptOR. --- optimizacion/Enunciados/CryptOR.ipynb | 1195 +++++++++++++++++ optimizacion/Soluciones/CryptOR.ipynb | 1775 +++++++++++++++++-------- 2 files changed, 2390 insertions(+), 580 deletions(-) create mode 100644 optimizacion/Enunciados/CryptOR.ipynb diff --git a/optimizacion/Enunciados/CryptOR.ipynb b/optimizacion/Enunciados/CryptOR.ipynb new file mode 100644 index 0000000..9fe4b85 --- /dev/null +++ b/optimizacion/Enunciados/CryptOR.ipynb @@ -0,0 +1,1195 @@ +{ + +"cells": [ + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "# CryptOR" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "Tags: Funciones a trozos" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "## Enunciado\n", + + "CryptOR is una compañía que se dedica a minar criptomonedas. El mayor problema de planeación para CryptOR es la compra de energía. Dado el alto consumo de energía, CryptOR debe negociar contratos para los próximos 12 meses con las diferentes empresas de generación eléctrica. El costo por kilovatio-hora (kWh) varía según la cantidad de energía contratada y la empresa generadora. El costo total en función del consumo está representado por funciones no lineales suministradas por cada generadora. Así mismo, cada empresa generadora establece la duración de cada contrato que se firme con la misma y el consumo máximo mensual que pueden suministrar. Los contratos de cada generadora se pueden renovar múltiples veces durante los 12 meses de planeación, pero estos no se deben traslapar. Finalmente, se conoce un pronóstico de la demanda de energía en kWh que se debe satisfacer sin holgura. Las Tablas 1 y 2 resumen toda la información disponible. " + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "### Tabla 1. Términos de los contratos para cada generadora.\n", + + "\n", + + "| |**Función de costo** | **Duración del contrato**| **Consumo máximo mensual**|\n", + + "|:-------------------:|:----------------------------------------:|:------------------------:|:-------------------------:|\n", + + "|**Generadora Carbón**|$f_1(x) = 0.0012 x^2$ | 2 meses | 250 kWh |\n", + + "|**Generadora Solar** |$f_2(x) = \\begin{cases}0.0028 x^2 - 0.5x + 35 \\ \\ x>0 \\\\ 0 \\ \\ x=0 \\end{cases}$ | 4 meses | 250 kWh |\n", + + "|**Generadora Eólica**|$f_3(x) = \\begin{cases}0.5 x log(\\frac{x}{150}) + 30 \\ \\ x>0 \\\\ 0 \\ \\ x=0 \\end{cases}$ | 3 meses | 250 kWh |\n", + + "\n", + + "### Tabla 2. Demanda mensual en kWh.\n", + + "|Mes| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12|\n", + + "|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|\n", + + "|demanda| 100| 150| 300| 300| 300| 500| 400| 400| 200| 200| 200| 200|" + + ] + + }, + + { + + "cell_type": "code", + + "execution_count": null, + + "metadata": {}, + + "outputs": [], + + "source": [ + + "import matplotlib.pyplot as plt\n", + + "import numpy as np\n", + + "\n", + + "def f1(x):\n", + + " # Función de costo de la generadora carbón\n", + + " return 0.0012 * (x ** 2)\n", + + "def f2(x):\n", + + " # Función de costo de la generadora solar\n", + + " return 0.0028 * x ** 2 - 0.5*x + 35\n", + + "def f3(x):\n", + + " # Función de costo de la generadora eólica\n", + + " return 0.5 * x*np.log(x/150) + 30\n", + + "\n", + + "# Puntos de evaluación de la función\n", + + "kwh = np.arange(1,250)\n", + + "\n", + + "fig, axs = plt.subplots(1,3, sharey=False, sharex=True, figsize=(15,5))\n", + + "axs[0].plot(kwh, f1(kwh))\n", + + "axs[1].plot(kwh, f2(kwh))\n", + + "axs[2].plot(kwh, f3(kwh))\n", + + "for ax_ix, ax in enumerate(axs):\n", + + " ax.set_xlabel(\"Consumo en kWh\")\n", + + " ax.set_ylabel(f\"f {ax_ix+1} (x)\")\n", + + " ax.set_ylim([0,100])\n", + + "\n" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "## Linealización a trozos\n", + + "\n", + + "Optimizar utilizando las funciones $f_1(x)$, $f_2(x)$ y $f_3(x)$ es computacionalmente más difícil debido a que son funciones no lineales. Sin embrago, dado que son funciones [convexas](https://es.wikipedia.org/wiki/Funci%C3%B3n_convexa) es posible aproximarlas con múltiples funciones lineales. Dada una función convexa $f(x)$, la función $g(x;x_0) = f(x_0) + f'(x_0) * (x-x0)$ es una aproximación de [primer orden](https://es.wikipedia.org/wiki/Serie_de_Taylor), la cual es exacta en $x_0$ y se degrada a medida que $x$ se aleja de $x_0$. Con esta idea en mente, cualquier función convexa se puede aproximar generando múltiples funciones de forma $g(x;x_0)$ para diferentes valores de $x_0$. La siguiente celda muestra la función $f(x) = (x - 4)^2$ (en azul) y su aproximación (en rojo) utilizando 4 rectas correspondientes a $g(x;x_0)$ para $x_0=0,3,5,8$." + + ] + + }, + + { + + "cell_type": "code", + + "execution_count": null, + + "metadata": {}, + + "outputs": [], + + "source": [ + + "import matplotlib.pyplot as plt\n", + + "import numpy as np\n", + + "\n", + + "def f(x, orden=0):\n", + + " if orden == 0:\n", + + " # Función (x-4) ^ 2\n", + + " return (x-4) ** 2 \n", + + " else:\n", + + " # Derivada evaluada en x\n", + + " return 2 *(x - 4)\n", + + "\n", + + "# Puntos de evaluacion de la función\n", + + "dominio = np.arange(-2,10,0.01)\n", + + "\n", + + "fig, axs = plt.subplots(1,1, sharey=False, sharex=True, figsize=(15,5))\n", + + "axs.plot(dominio, f(dominio))\n", + + "for x_0 in [0, 3, 5, 8]:\n", + + " axs.plot(dominio, f(x_0) + f(x_0,1) * (dominio - x_0), linestyle='dashed', color='red')\n", + + " print(f'Función evaluada en {x_0}: {f(x_0):.1f} + {f(x_0, 1):.1f} * (x - {x_0})')\n", + + "axs.set_xlabel(\"Consumo en kWh\")\n", + + "axs.set_ylabel(f\"f(x)\")\n", + + "axs.set_ylim([-2,40])\n" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "### Optimizando con la aproximación\n", + + "Para una función convexa, $f(x)$, los siguientes problemas son equivalentes:\n", + + " $$\n", + + "\\begin{align*}\n", + + "\\min & f(x) &= \\ \\ \\min \\ \\ &z \\\\ \n", + + "&x\\in \\mathbb{R}. & & z \\geq f(x), \\\\\n", + + "& & & x \\in \\mathbb{R}.\n", + + "\\end{align*}\n", + + "$$\n", + + "Asi mismo, $f(x)\\geq g(x,x_0)$ para cualquier valor de $x_0$. \n", + + "\n", + + "Con estas dos observaciones, el problema original, $\\min_{x\\in\\mathbb{R}} (x-4)^2$, lo podemos aproximar con el siguiente modelo:\n", + + " $$\n", + + "\\begin{align*}\n", + + "\\min \\ \\ &z \\\\ \n", + + " & z \\geq 16 -8 * (x - 0) \\\\\n", + + " & z \\geq 1 -2 * (x - 3) \\\\\n", + + " & z \\geq 1 + 2 * (x - 5) \\\\\n", + + " & z \\geq 16 + 8 * (x - 8) \\\\\n", + + " & x \\in \\mathbb{R} \n", + + "\\end{align*}\n", + + "$$\n" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "### Funciones de costo aproximadas\n", + + "Volviendo al problema de cryptOR, una posible aproximación se muestra a continuación. " + + ] + + }, + + { + + "cell_type": "code", + + "execution_count": null, + + "metadata": {}, + + "outputs": [], + + "source": [ + + "import matplotlib.pyplot as plt\n", + + "import numpy as np\n", + + "\n", + + "def f1(x, orden=0):\n", + + " if orden == 0:\n", + + " # Función de costo de la generadora carbón\n", + + " return 0.0012 * (x ** 2) \n", + + " else:\n", + + " # Derivada evaluada en x\n", + + " return 0.0012 * 2 * x\n", + + "\n", + + "def f2(x, orden=0):\n", + + " if orden == 0:\n", + + " # Función de costo de la generadora solar\n", + + " return 0.0028 * x ** 2 - 0.5*x + 35\n", + + " else:\n", + + " # Derivada evaluada en x\n", + + " return 2 * 0.0028 * x - 0.5\n", + + "def f3(x, orden=0):\n", + + " if orden == 0:\n", + + " # Función de costo de la generadora eólica\n", + + " return 0.5 * x*np.log(x/150) + 30\n", + + " else:\n", + + " # Derivada evaluada en x\n", + + " return 0.5 * np.log(x/150) + 0.5\n", + + "\n", + + "# Funciones de costo\n", + + "f = [f1,f2,f3]\n", + + "# Puntos de evaluación de la función\n", + + "kwh = np.arange(1,250)\n", + + "\n", + + "fig, axs = plt.subplots(1,3, sharey=False, sharex=True, figsize=(15,5))\n", + + "for i, ax in enumerate(axs):\n", + + " axs[i].plot(kwh, f[i](kwh), )\n", + + " for x_0 in [20, 50, 100, 200]:\n", + + " axs[i].plot(kwh, f[i](x_0) + f[i](x_0,1) * (kwh - x_0), linestyle='dashed', color='red')\n", + + " print(f'Función {i+1} evaluada en {x_0}: {f[i](x_0):.3f} + {f[i](x_0, 1):.3f} * (x - {x_0})')\n", + + " ax.set_xlabel(\"Consumo en kWh\")\n", + + " ax.set_ylabel(f\"f {i+1} (x)\")\n", + + " ax.set_ylim([-1,100])\n" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "
\n", + + "Formule un modelo general de optimización lineal que le permita a CryptOR satisfacer la demanda de energía al mínimo costo y satisfaciendo las condiciones de los contratos. Para esto usted debe seguir los siguientes pasos: " + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "## Formulación\n", + + "\n", + + "**1.** Escriba lo(s) conjunto(s), parámetro(s) y variable(s) de decisión que utilizará en el modelo. \n", + + "\n", + + "### Conjuntos\n", + + "- $P$: Generadoras\n", + + "- $T$: Periodos de planeación\n", + + "\n", + + "### Parámetros\n", + + "- $d_t$: demanda de energía en kWh para el mes $t\\in T$\n", + + "- $b_i$: Consumo máximo mensual de la generadora $i\\in G$\n", + + "- $m_i$: Duración de cada contrato de la generadora $i\\in G$\n", + + "- $a_{ik}$: intercepto de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", + + "- $p_{ik}$: pendiente de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", + + "\n", + + "### Variables de decisión\n", + + "- $x_{it}$: cantidad de kWh contratados a la generadora $i\\in G$ para el mes $t\\in T$\n", + + "- $y_{it}$: variable binaria que indica si un nuevo contrato se firma con la generadora $i\\in G$ en el mes $t\\in T$\n", + + "- $v_{it}$: variable binaria que indica si un contrato con la generadora $i\\in G$ esta vigente en el mes $t\\in T$\n", + + "- $z_{it}$: costo total por consumo de energía de la generadora $i\\in G$ en el mes $t\\in T$" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "### Restricciones\n", + + "**2.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que se debe respetar la demanda exacta en cada mes. \n" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "$$\n", + + "\\begin{align*}\n", + + "\\sum_{i \\in G}x_{it} = d_t \\ \\ \\forall t \\in T.\n", + + "\\end{align*}\n", + + "$$" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "**3.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que la cantidad de kWh contratados no superan el consumo máximo mensual en los meses en donde hay un contrato vigente.\n", + + "$$\n", + + "\\begin{align*}\n", + + "x_{it} \\leq b_i v_{it} \\forall i \\in G, t \\in T.\n", + + "\\end{align*}\n", + + "$$" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "**4.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que si un contrato se firma, debe estar vigente por la duración estipulada, y que solo se puede haber un contrato vigente si se firmó previamente o en el mismo mes.\n", + + "$$\n", + + "\\begin{align*}\n", + + "\\sum_{t' \\in \\{\\max\\{t-m_i+1, 1\\}, \\ldots, t\\}}y_{it'} \\geq v_{it} \\ \\ \\forall i \\in G, t \\in T. \\\\ \n", + + "|\\{t, \\ldots, \\min\\{t+m_i-1,12\\}\\}|y_{it} \\leq \\sum_{t' \\in \\{t, \\ldots, \\min\\{t+m_i-1,12\\}\\}}v_{it} \\ \\ \\forall i \\in G, t \\in T. \\\\ \n", + + "\\end{align*}\n", + + "$$" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "**4.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que los contratos con cada generadora no se deben traslapar.\n", + + "$$\n", + + "\\begin{align*}\n", + + "\\sum_{t' \\in \\{t, \\ldots, t+m_i-1\\}}y_{it'} \\leq 1 \\ \\ \\forall i \\in G, t \\in T.\n", + + "\\end{align*}\n", + + "$$" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "**4.** Escriba la(s) restricción(es) lineal(es) que modelan las funciones de costo con expresiones lineales. Note que si no hay un contrato vigente en un mes particular, el costo es cero.\n", + + "$$\n", + + "\\begin{align*}\n", + + "z_{it} \\geq a_{ik} + p_{ik} x_{it} - M(1-v_{it}) \\ \\ \\forall i \\in G, t \\in T, k \\in \\{1,2,3,4\\}\n", + + "\\end{align*}\n", + + "$$" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "**4.** Escriba la(s) restricción(es) que describe(n) matemáticamente el tipo de variable(s) que está utilizando dentro del modelo. \n", + + "\n", + + "$$\n", + + "\\begin{align*}\n", + + "x_{it} & \\ge 0 \\ \\ &&\\forall i\\in G,t\\in T.\\\\\n", + + "y_{it} & \\in\\{0,1\\} \\ \\ &&\\forall i\\in G,t\\in T.\\\\\n", + + "v_{it} & \\in \\{0,1\\} \\ \\ &&\\forall i\\in G,t\\in T.\\\\\n", + + "z_{it} & \\ge 0 \\ \\ &&\\forall i\\in G,t\\in D.\\\\\n", + + "\\end{align*}\n", + + "$$" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "### Función Objetivo\n", + + "**5.** Escriba la función objetivo.\n", + + "\n", + + "$$\n", + + "\\text{minimizar } \\sum_{i\\in P}\\sum_{t\\in T}z_{it}\n", + + "$$" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "## Formulación matemática completa" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "## Formulación\n", + + "\n", + + "**1.** Escriba lo(s) conjunto(s), parámetro(s) y variable(s) de decisión que utilizará en el modelo. \n", + + "\n", + + "### Conjuntos\n", + + "- $P$: Generadoras\n", + + "- $T$: Periodos de planeación\n", + + "\n", + + "### Parámetros\n", + + "- $d_t$: demanda de energía en kWh para el mes $t\\in T$\n", + + "- $b_i$: Consumo máximo mensual de la generadora $i\\in G$\n", + + "- $m_i$: Duración de cada contrato de la generadora $i\\in G$\n", + + "- $a_{ik}$: intercepto de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", + + "- $p_{ik}$: pendiente de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", + + "\n", + + "### Variables de decisión\n", + + "- $x_{it}$: cantidad de kWh contratados a la generadora $i\\in G$ para el mes $t\\in T$\n", + + "- $y_{it}$: variable binaria que indica si un nuevo contrato se firma con la generadora $i\\in G$ en el mes $t\\in T$\n", + + "- $v_{it}$: variable binaria que indica si un contrato con la generadora $i\\in G$ está vigente en el mes $t\\in T$\n", + + "- $z_{it}$: costo total por consumo de energía de la generadora $i\\in G$ en el mes $t\\in T$\n", + + "\n", + + "**Modelo:**\n", + + "\n", + + "$$\n", + + "\\begin{align*}\n", + + "\n", + + "&\\text{minimizar } & \\sum_{i\\in P}\\sum_{t\\in T}z_{it} &&(1)\\\\\n", + + "&\\text{sujeto a}&&& \\\\\n", + + "&&\\sum_{i \\in G}x_{it} = d_t \\ \\ \\ \\ & \\forall t \\in T; &(2) \\\\\n", + + "&&x_{it} \\leq b_i v_{it} \\ \\ \\ \\ & \\forall i \\in G, t \\in T;&(3)\\\\\n", + + "&&\\sum_{t' \\in \\{\\max\\{t-m_i+1, 1\\}, \\ldots, t\\}}y_{it'} \\geq v_{it} \\ \\ \\ \\ & \\forall i \\in G, t \\in T; &(4)\\\\ \n", + + "&&|\\{t, \\ldots, \\min\\{t+m_i-1,12\\}\\}|y_{it} \\leq \\sum_{t' \\in \\{t, \\ldots, \\min\\{t+m_i-1,12\\}\\}}v_{it} \\ \\ \\ \\ & \\forall i \\in G, t \\in T;&(5)\\\\\n", + + "&&\\sum_{t' \\in \\{t, \\ldots, t+m_i-1\\}}y_{it'} \\leq 1 \\ \\ \\ \\ & \\forall i \\in G, t \\in T;&(6) \\\\ \n", + + "&&z_{it} \\geq a_{ik} + p_{ik} x_{it} - M(1-v_{it}) \\ \\ \\ \\ & \\forall i \\in G, t \\in T, k \\in \\{1,2,3,4\\};&(7) \\\\\n", + + "&&x_{it} \\ge 0 \\ \\ \\ \\ &\\forall i\\in G,t\\in T; &(8)\\\\\n", + + "&&y_{it} \\in\\{0,1\\} \\ \\ \\ \\ &\\forall i\\in G,t\\in T;\\\\\n", + + "&&v_{it} \\in \\{0,1\\} \\ \\ \\ \\ &\\forall i\\in G,t\\in T;\\\\\n", + + "&&z_{it} \\ge 0 \\ \\ \\ \\ &\\forall i\\in G,t\\in D.\n", + + "\\end{align*}\n", + + "$$" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "## Implementación\n", + + "**6.** Resuelva el modelo planteado utilizando la librería de PulP en Python. ¿Cuál es la solución\n", + + "óptima del problema? " + + ] + + }, + + { + + "cell_type": "code", + + "execution_count": null, + + "metadata": { + + "scrolled": true + + }, + + "outputs": [], + + "source": [ + + "#Importar librerías\n", + + "import pulp as lp\n", + + "import numpy as np\n", + + "from itertools import product\n", + + "\n", + + "#-----------------\n", + + "# Conjuntos\n", + + "#-----------------\n", + + "# Generadoras\n", + + "G=[\"Generadora 1\",\"Generadora 2\",\"Generadora 3\",]\n", + + "\n", + + "# Periodos de planeación\n", + + "T = list(range(1,12+1)) # range excluye el final del intervalo.\n", + + "\n", + + "# Conjunto de tuplas (i,t) donde i es una generadora\n", + + "# en G y t es un periodo de tiempo en T. \n", + + "G_x_T = list(product(G,T))\n", + + "\n", + + "#-----------------\n", + + "# Parámetros\n", + + "#-----------------\n", + + "d={# Periodo: demanda en kWh\n", + + " 1: 100, 2: 150, 3: 150, 4: 200, 5: 100, 6: 100,\n", + + " 7: 400, 8: 100, 9: 100, 10: 100, 11: 100, 12: 100} \n", + + "b={# Generadora: consumo maximo en kWh\n", + + " \"Generadora 1\":250,\n", + + " \"Generadora 2\":250,\n", + + " \"Generadora 3\":250}\n", + + "\n", + + "m={# Generadora: duración de por contrato en meses\n", + + " \"Generadora 1\":2,\n", + + " \"Generadora 2\":4,\n", + + " \"Generadora 3\":3}\n", + + "\n", + + "# Funciones de aproximación\n", + + "# Función 1 evaluada en 20: 0.480 + 0.048 * (x - 20)\n", + + "# Función 1 evaluada en 50: 3.000 + 0.120 * (x - 50)\n", + + "# Función 1 evaluada en 100: 12.000 + 0.240 * (x - 100)\n", + + "# Función 1 evaluada en 200: 48.000 + 0.480 * (x - 200)\n", + + "# Función 2 evaluada en 20: 26.120 + -0.388 * (x - 20)\n", + + "# Función 2 evaluada en 50: 17.000 + -0.220 * (x - 50)\n", + + "# Función 2 evaluada en 100: 13.000 + 0.060 * (x - 100)\n", + + "# Función 2 evaluada en 200: 47.000 + 0.620 * (x - 200)\n", + + "# Función 3 evaluada en 20: 9.851 + -0.507 * (x - 20)\n", + + "# Función 3 evaluada en 50: 2.535 + -0.049 * (x - 50)\n", + + "# Función 3 evaluada en 100: 9.727 + 0.297 * (x - 100)\n", + + "# Función 3 evaluada en 200: 58.768 + 0.644 * (x - 200)\n", + + "f={#Generadora: lista de tuplas (a,p), donde \"a\" es el \n", + + " # intercepto y \"p\" la pendiente de una función\n", + + " # aproximando el costo de la generadora\n", + + " \"Generadora 1\":[(0.48 - 0.048*20, 0.048),\n", + + " (3.0 - 0.12*50, 0.12),\n", + + " (12 - 0.24*100, 0.24),\n", + + " (48 - 0.48*200, 0.48)],\n", + + " \"Generadora 2\":[(26.12 + 0.388*20, -0.388),\n", + + " (17 + 0.22*50, -0.22),\n", + + " (13 - 0.06*100, 0.06),\n", + + " (47 - 0.62*200, 0.62)],\n", + + " \"Generadora 3\":[(9.851 + 0.507*20, -0.507),\n", + + " (2.535 + 0.049*50, -0.049),\n", + + " (9.727 - 0.297*100 , 0.297),\n", + + " (58.768 - 0.644*200, 0.644)]}\n", + + "\n", + + "#-------------------------------------\n", + + "# Creación del objeto problema en PuLP\n", + + "#-------------------------------------\n", + + "#Crea el problema para cargarlo con la instancia \n", + + "problema=lp.LpProblem(\"CryptOT\",lp.LpMinimize)\n", + + "\n", + + "#-----------------------------\n", + + "# Variables de Decisión\n", + + "#-----------------------------\n", + + "# Consumo mensual (en kWh) de la generadora i en G en el periodo\n", + + "# de tiempo t en T\n", + + "limite_superior_x = np.max([b[i] for i in G])\n", + + "x=lp.LpVariable.dicts('x', G_x_T, lowBound=0, upBound=limite_superior_x,\n", + + " cat=lp.const.LpContinuous)\n", + + "\n", + + "# Variable binaria que indica si un nuevo contrato es firmado con la\n", + + "# generadora i en G en el periodo de tiempo t en T\n", + + "y=lp.LpVariable.dicts('y', G_x_T, cat=lp.const.LpBinary)\n", + + "\n", + + "# Variable binaria que indica si hay un contrato vigente con la\n", + + "# generadora i en G en el periodo de tiempo t en T\n", + + "v=lp.LpVariable.dicts('v', G_x_T, cat=lp.const.LpBinary)\n", + + "\n", + + "\n", + + "# Variable auxiliar para calcular el costo por consumo asociado\n", + + "# a la generadora i en G en el periodo de tiempo t en T\n", + + "z=lp.LpVariable.dicts('z', G_x_T, lowBound=0, cat=lp.const.LpContinuous)\n", + + "\n", + + "#-----------------------------\n", + + "# Función objetivo\n", + + "#-----------------------------\n", + + "#Crea la expresión de minimización de costos\n", + + "problema+=lp.lpSum(z[i,t] for i in G for t in T), \"Costo anual\"\n", + + "\n", + + "#-----------------------------\n", + + "# Restricciones\n", + + "#-----------------------------\n", + + "\n", + + "\n", + + "# Satisfacción de la demanda\n", + + "# sum(i in G)x_it = d_t forall t in T\n", + + "for t in T:\n", + + " problema+= lp.lpSum(x[i,t] for i in G) == d[t], f\"Satisfacción de la demanda en el mes {t}\" \n", + + "\n", + + "# Relación entre consumo y contratos vigentes\n", + + "# x_it <= b_i * v_it forall i in G, t in T\n", + + "for (i,t) in G_x_T:\n", + + " problema+= x[i,t] <= b[i]*v[i,t], f\"Consumo de la generadora {i} en el mes {t}\" \n", + + "\n", + + "# Duracion de los contratos\n", + + "for (i,t) in G_x_T:\n", + + " # Periodos en los que podría ser firmado un contrato para que este vigente en t.\n", + + " T_f = [tt for tt in range(t - m[i] + 1, t + 1) if tt>=1] \n", + + " problema+= sum(y[i,tt] for tt in T_f) >= v[i,t], f\"Vigencia en el mes {t} de contratos de la Generadora {i} parte 1\"\n", + + " # Periodos vigentes si se firma un contrato en t\n", + + " T_v = [tt for tt in range(t, t + m[i]) if tt<=12] \n", + + " problema+= len(T_v) * y[i,t] <= sum(v[i,tt] for tt in T_v), f\"Vigencia en el mes {t} de contratos de la Generadora {i} parte 2\"\n", + + "\n", + + "# Máximo un contrato vigente por generadora en cada mes\n", + + "# sum(tt in [t, ..., t+m_i-1])y_i,tt <= 1 forall i in G, t in T\n", + + "for (i,t) in G_x_T:\n", + + " # Periodos vigentes si se firma un contrato en t\n", + + " T_v = [tt for tt in range(t, t + m[i]) if tt<=12] \n", + + " problema+= lp.lpSum(y[i,tt] for tt in T_v) <= 1, f\"Limite de nuevos contratos de la Generadora {i} firmados en el mes {t}\" \n", + + "\n", + + "# Función aproximada a trozos\n", + + "# z_it >= a_ik * p_ik * x_it - M(1-v_it)forall i in G, t in T, k = 1,...,numero_de_funciones\n", + + "M = 100\n", + + "for (i,t) in G_x_T:\n", + + " for k, (a,p) in enumerate(f[i]):\n", + + " problema+= z[i,t] >= a+ p*x[i,t] - M * (1-v[i,t]), f\"Aproximación {k} del costo por consumo de la generadora {i} en el mes {t}\" \n", + + "\n", + + "#-----------------------------\n", + + "# Imprimir formato LP\n", + + "#-----------------------------\n", + + "#Escribe el problema en un archivo con formato LP \n", + + "problema.writeLP(\"CryptOR.lp\")\n", + + "\n", + + "#-----------------------------\n", + + "# Invocar el optimizador\n", + + "#-----------------------------\n", + + "#Optimizar el modelo con CBC (default de PuLP)\n", + + "problema.solve()\n", + + "\n", + + "#-----------------------------\n", + + "# Imprimir resultados\n", + + "#-----------------------------\n", + + "#Imprimir estado final del optimizador\n", + + "print(\"Estado (optimizador):\", lp.LpStatus[problema.status],end='\\n')\n", + + "\n", + + "#Valor óptimo del plan de transporte \n", + + "print(\"\\n Costos totales = $\", round(lp.value(problema.objective),2))\n", + + "print()\n", + + "\n", + + "#Imprimir variables de decisión\n", + + "print(\"Variables de decisión\")\n", + + "tap_ = \"\"\n", + + "print(f'{\"Mes\":10s} {tap_.join(f\"{t:>8d}\" for t in T)}')\n", + + " \n", + + "for i in G:\n", + + " print(f'{i:10s} {tap_.join(f\"{x[i,t].value():>8.2f}\" for t in T)}')\n", + + " print(f'{\"Nuevo\":10s} {tap_.join(f\"{y[i,t].value():>8.0f}\" for t in T)}')\n", + + " print(f'{\"Vigente\":10s} {tap_.join(f\"{v[i,t].value():>8.0f}\" for t in T)}')" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "## Créditos\n", + + "Instancia: Daniel Duque
\n", + + "Fecha: 21/12/2021" + + ] + + } + +], + +"metadata": { + + "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.5" + + } + +}, + +"nbformat": 4, + +"nbformat_minor": 4 + +} diff --git a/optimizacion/Soluciones/CryptOR.ipynb b/optimizacion/Soluciones/CryptOR.ipynb index 89ab6e0..9fe4b85 100644 --- a/optimizacion/Soluciones/CryptOR.ipynb +++ b/optimizacion/Soluciones/CryptOR.ipynb @@ -1,580 +1,1195 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Producción de Energía" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Tags: Transporte" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Enunciado\n", - "CryptOR is una compañía que se dedica a minar criptomonedas. El mayor problema de planeación para CryptOR es la compra de energía. Dado el alto consumo de energía, CryptOR debe negociar contratos para los proximos 12 meses con las diferentes empresas de generación eléctrica. El costo por kilovatio-hora (kWh) varía según la cantidad de energía contratada y la empresa generadora. El costo total en función del consumo esta representado por funciones no lineales suministradas por cada generadora. Asi mismo, cada empresa generadora establece la duración de cada contrato que se firme con la misma. Los contratos se pueden renovar durante los 12 meses de planeacion, pero en ningun mes se puede firmar mas de un contrato por generadora. El consumo máximo mensual es de 250 kWh para cada generadora. Finalmente, se conoce un pronostico de la demanda de energia en kWh. Las Tablas 1 y 2 resumen toda la informacion disponible. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Tabla 1. Terminos de los contratos para cada generadora.\n", - "\n", - "| |**Función de costo** | **Duración del contrato**| **Consumo máximo mensual**|\n", - "|:-------------------:|:----------------------------------------:|:------------------------:|:-------------------------:|\n", - "|**Generadora Carbón**|$f_1(x) = 0.0012 x^2$ | 2 meses | 250 kWh |\n", - "|**Generadora Solar** |$f_2(x) = 0.0028 x^2 - 0.5x + 35$ | 4 meses | 250 kWh |\n", - "|**Generadora Eólica**|$f_3(x) = 0.5 x log(\\frac{x}{150}) + 30$ | 3 meses | 250 kWh |\n", - "\n", - "### Tabla 2. Demanda mensual en kWh.\n", - "\n", - "|Mes| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12|\n", - "|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|\n", - "|demanda| 350| 500| 500| 600| 700| 500| 600| 400| 400| 400| 400| 400|" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "\n", - "def f1(x):\n", - " # Función de costo de la generadora carbón\n", - " return 0.0012 * (x ** 2)\n", - "def f2(x):\n", - " # Función de costo de la generadora solar\n", - " return 0.0028 * x ** 2 - 0.5*x + 35\n", - "def f3(x):\n", - " # Función de costo de la generadora eólica\n", - " return 0.5 * x*np.log(x/150) + 30\n", - "\n", - "# Puntos de evaluacion de la función\n", - "kwh = np.arange(1,250)\n", - "\n", - "fig, axs = plt.subplots(1,3, sharey=False, sharex=True, figsize=(15,5))\n", - "axs[0].plot(kwh, f1(kwh))\n", - "axs[1].plot(kwh, f2(kwh))\n", - "axs[2].plot(kwh, f3(kwh))\n", - "for ax_ix, ax in enumerate(axs):\n", - " ax.set_xlabel(\"Consumo en kWh\")\n", - " ax.set_ylabel(f\"f {ax_ix+1} (x)\")\n", - " ax.set_ylim([0,100])\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Linealización a trozos\n", - "\n", - "Optimizar utilizando las funciones $f_1(x)$, $f_2(x)$ y $f_3(x)$ es computacionalmente más difícil debido a son funciones no lineales. Sin embrago, dado que son funciones [convexas](https://es.wikipedia.org/wiki/Funci%C3%B3n_convexa) es posible aproximarlas con multiples funciones lineales. Dada una función convexa $f(x)$, la funcion $g(x;x_0) = f(x_0) + f'(x_0) * (x-x0)$ es una aproximación de [primer orden](https://es.wikipedia.org/wiki/Serie_de_Taylor), la cual es exacta en $x_0$ y se degrada a medida que $x$ se aleja de $x_0$. Con esta idea en mente, cualquier función convexa se puede aproximar generando multiples funciones de forma $g(x;x_0)$ para diferentes valores de $x_0$. La siguiente celda muestra la funcion $f(x) = (x - 4)^2$ (en azul) y su aproximación utilizando 4 rectas correspondientes a $g(x;x_0)$ para $x_0=0,2,4,5$." - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Función evaluada en 0: 16.000 + -8.000 * (x - 0)\n", - "Función evaluada en 2: 4.000 + -4.000 * (x - 2)\n", - "Función evaluada en 4: 0.000 + 0.000 * (x - 4)\n", - "Función evaluada en 5: 1.000 + 2.000 * (x - 5)\n" - ] - }, - { - "data": { - "text/plain": [ - "(-1.0, 20.0)" - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA28AAAEvCAYAAADSCPm5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAAsTAAALEwEAmpwYAABmKElEQVR4nO3dd3zV9fXH8dc3m0AGSRhhJEDC3ohsEQGVqdZZFax71GqH/hxd1rZWq9VatVptrQP3qgo4ASeCgKggIxBGWGEkISF73c/vj8P1JoA4GDc3eT8fj/vIvd/vzc0nJNzcc8/5nOM55xAREREREZGGLSzYCxAREREREZFvp+BNREREREQkBCh4ExERERERCQEK3kREREREREKAgjcREREREZEQoOBNREREREQkBEQEewF1paSkuE6dOgV7GSIiIiIiIkHx2Wef5TnnWh3oXIMK3jp16sSSJUuCvQwREREREZGg8Dwv55vOqWxSREREREQkBCh4ExERERERCQEK3kREREREREKAgjcREREREZEQoOBNREREREQkBCh4ExERERERCQEK3kREREREREKAgjcREREREZEQoOBNREREREQkBCh4+xa7iit5csFGKqprg70UERERERE5DLbsLmPGgo3BXsb3FhHsBTR0byzP5ZbXV/DAvGwuH92F84em0ywqPNjLEhERERGR72ljXikPvp/NK0u3EhbmcVLvtrSJjwn2sr4zzzkX7DV8bfDgwW7JkiXBXkY9zjkWrM/n/rnZLFifT3LzKC49rgvTh6fTIlqxr4iIiIhIQ5e9s5h/vreO177YSmR4GOcOSeOK47uQmtAs2Evbj+d5nznnBh/wnIK3727JxgLum5fNh2t2kRgbycUjO/OTEZ1IaBYZ7KWJiIiIiMg+VuXu4YF52bzxVS4xEeFMG5bGZaO70Dqu4WbbFLwdZl9sLuSBeWuZs2oncdERXDiyExeP7EzL5lHBXpqIiIiISJO3fEsR989byzsrd9AiOoILhqdzyajOJLeIDvbSvpWCtyNkxbYiHpiXzZtfbad5VDjThqdz2XFdSAmBXwoRERERkcZm6abd3D93Le9l7SI+JoKLRnbmopGdSIwNnSSLgrcjbM2OYh6Yl82sZduIigjjvCHpXHF8l5Da/CgiIiIiEqo+XZ/P/fOy+Tg7j5axkV/3qIiPCb3tTQrejpL1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QnY2rFxpg8IHDLDzv/2tZeEuuwxefx3KyoK52iZLZZMiIiIiIhLgedCzp138xo6FrVvh+efhP/+BmBg4+2x44ongrbMJUvAmIiIiIiIH598DV1UFH35oYwhiYuycc3D66dC/v91n0KBAoxQ5rDQqQEREREREfriiIpg0CRYssECuXTsbQ3DFFRbIyfeiUQEiIiIiInJkJCTA/PmwYwc8/jgMHw7PPANr19r5jRvhkUdg27ZgrrJRUNmkiIiIiIgculat4Cc/sUtlZeD47Nnws5/Z9cGDAyWYAwaovPJ7UuZNREREREQOr+hou4CNHVi2DG67DSIi4A9/gCFDYM8eO79xI5SXB2ulIUXBm4iIiIiIHDmeB337wq9/bfvitm+H116zckuACy6AlBQ49VTrZLl9e3DX24ApeBMRERERkaOndWtrcOL3u9/BhRfC55/bHLnU1ECZJVgTFAEUvImIiIiISDCdeCL885+QkwNffgl//jOMHm3n8vOhSxcrvXzzTaioCO5ag0wNS0REREREJPg8D/r1s4tfYSEMHAhPPgkPPQTNm1uw9+c/Q+/eQVtqsCh4ExERERGRhikjA155xTJu779vw8HrDgh/+21YvNi6V/br1+i7V6psUkREREREGraYGJgwIVBemZFhxz/4wPbMDRgAnTrB1VfDW2812n1yCt5ERERERCR01M2u/eUvkJtrXSoHDrQh4b/6VeA+771nw8MbCc81oKh08ODBbsmSJcFehoiIiIiIhKLycti0Cbp3h6oqGxxeXGxz5fzDwfv2bdDllZ7nfeacG3ygc8q8iYiIiIhI49CsmQVuAJGRtk/uD3+A2lr47W+hf39rdhKi1LBEREREREQaH8+zUsqBA+H3v4dt22D2bBg2LNgr+8EUvImIiIiISOPXrp0NAQ9hKpsUEREREREJAQreREREREREQoCCNxERERERkRCg4E1ERERERCQEKHgTEREREREJAQreREREREREQoCCNxERERERkRCg4E1ERERERCQEKHgTEREREREJAQreREREREREQoCCNxERERERkRDgOeeCvYaveZ63C8gJ9jqamBQgL9iLkO9MP6/Qo59Z6NHPLPToZxZa9PMKPfqZHV3pzrlWBzrRoII3Ofo8z1vinBsc7HXId6OfV+jRzyz06GcWevQzCy36eYUe/cwaDpVNioiIiIiIhAAFbyIiIiIiIiFAwZs8EuwFyPein1fo0c8s9OhnFnr0Mwst+nmFHv3MGgjteRMREREREQkByryJiIiIiIiEAAVvTZzneXd5nrfa87xlnuf9z/O8xGCvSQ7M87wJnudleZ6X7XneTcFejxyc53kdPc97z/O8VZ7nrfA87+fBXpN8O8/zwj3P+9zzvFnBXot8O8/zEj3Pe2nv37FVnucND/aa5OA8z/vl3ufErzzPe9bzvJhgr0nq8zzvv57n7fQ876s6x5I8z3vX87y1ez+2DOYamzIFb/Iu0Mc51w9YA9wc5PXIAXieFw78E5gI9ALO9TyvV3BXJd+iBrjOOdcTGAZcrZ9ZSPg5sCrYi5Dv7B/AW865HkB/9LNr0DzPaw9cCwx2zvUBwoEfB3dVcgCPAxP2OXYTMNc51xWYu/e2BIGCtybOOfeOc65m782FQIdgrke+0RAg2zm33jlXBTwHnBrkNclBOOdynXNL914vxl5Utg/uquRgPM/rAEwG/hPstci38zwvHhgNPArgnKtyzhUGdVHyXUQAzTzPiwBigW1BXo/swzn3IVCwz+FTgSf2Xn8COO1orkkCFLxJXRcDbwZ7EXJA7YHNdW5vQYFAyPA8rxMwEPg0yEuRg7sXuAHwBXkd8t10AXYBj+0tdf2P53nNg70o+WbOua3A34BNQC5Q5Jx7J7irku+ojXMuF+zNSaB1kNfTZCl4awI8z5uzt7Z838upde7zG6zM6+ngrVQOwjvAMbWKDQGe57UAXgZ+4ZzbE+z1yIF5njcF2Omc+yzYa5HvLAIYBDzknBsIlKJSrgZt7z6pU4HOQDugued504K7KpHQEhHsBciR55wbf7Dznuf9BJgCjHOaHdFQbQE61rndAZWaNHie50VigdvTzrlXgr0eOaiRwCme500CYoB4z/Oecs7phWXDtQXY4pzzZ7RfQsFbQzce2OCc2wXged4rwAjgqaCuSr6LHZ7npTrncj3PSwV2BntBTZUyb02c53kTgBuBU5xzZcFej3yjxUBXz/M6e54XhW3wfj3Ia5KD8DzPw/birHLO3RPs9cjBOeduds51cM51wv5/zVPg1rA557YDmz3P67730DhgZRCXJN9uEzDM87zYvc+R41CTmVDxOvCTvdd/ArwWxLU0acq8yQNANPCuPY+y0Dl3ZXCXJPtyztV4nvcz4G2sO9d/nXMrgrwsObiRwHRgued5X+w99mvn3BvBW5JIo3MN8PTeN7XWAxcFeT1yEM65Tz3PewlYim3V+Bx4JLirkn15nvcsMAZI8TxvC3ALcAfwgud5l2BB+FnBW2HT5qlKTkREREREpOFT2aSIiIiIiEgIUPAmIiIiIiISAhS8iYiIiIiIhAAFbyIiIiIiIiFAwZuIiIiIiEgIUPAmIiIiIiISAhS8iYiIiIiIhAAFbyIiIiIiIiHg/wFcFbbjk0+RCgAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "\n", - "def f(x, orden=0):\n", - " if orden == 0:\n", - " # Función (x-4) ^ 2\n", - " return (x-4) ** 2 \n", - " else:\n", - " # Derivada evaluada en x\n", - " return 2 *(x - 4)\n", - "\n", - "# Puntos de evaluacion de la función\n", - "dominio = np.arange(-3,12)\n", - "\n", - "fig, axs = plt.subplots(1,1, sharey=False, sharex=True, figsize=(15,5))\n", - "axs.plot(dominio, f(dominio))\n", - "for x_0 in [0, 2, 4, 5]:\n", - " axs.plot(dominio, f(x_0) + f(x_0,1) * (dominio - x_0), linestyle='dashed', color='red')\n", - " print(f'Función evaluada en {x_0}: {f(x_0):.3f} + {f(x_0, 1):.3f} * (x - {x_0})')\n", - "axs.set_xlabel(\"Consumo en kWh\")\n", - "axs.set_ylabel(f\"f(x)\")\n", - "axs.set_ylim([-1,20])\n" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Función 1 evaluada en 20: 0.480 + 0.048 * (x - 20)\n", - "Función 1 evaluada en 50: 3.000 + 0.120 * (x - 50)\n", - "Función 1 evaluada en 100: 12.000 + 0.240 * (x - 100)\n", - "Función 1 evaluada en 200: 48.000 + 0.480 * (x - 200)\n", - "Función 2 evaluada en 20: 26.120 + -0.388 * (x - 20)\n", - "Función 2 evaluada en 50: 17.000 + -0.220 * (x - 50)\n", - "Función 2 evaluada en 100: 13.000 + 0.060 * (x - 100)\n", - "Función 2 evaluada en 200: 47.000 + 0.620 * (x - 200)\n", - "Función 3 evaluada en 20: 9.851 + -0.507 * (x - 20)\n", - "Función 3 evaluada en 50: 2.535 + -0.049 * (x - 50)\n", - "Función 3 evaluada en 100: 9.727 + 0.297 * (x - 100)\n", - "Función 3 evaluada en 200: 58.768 + 0.644 * (x - 200)\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "\n", - "def f1(x, orden=0):\n", - " if orden == 0:\n", - " # Función de costo de la generadora carbón\n", - " return 0.0012 * (x ** 2) \n", - " else:\n", - " # Derivada evaluada en x\n", - " return 0.0012 * 2 * x\n", - "\n", - "def f2(x, orden=0):\n", - " if orden == 0:\n", - " # Función de costo de la generadora solar\n", - " return 0.0028 * x ** 2 - 0.5*x + 35\n", - " else:\n", - " # Derivada evaluada en x\n", - " return 2 * 0.0028 * x - 0.5\n", - "def f3(x, orden=0):\n", - " if orden == 0:\n", - " # Función de costo de la generadora eólica\n", - " return 0.5 * x*np.log(x/150) + 30\n", - " else:\n", - " # Derivada evaluada en x\n", - " return 0.5 * np.log(x/150) + 0.5\n", - "\n", - "# Funciones de costo\n", - "f = [f1,f2,f3]\n", - "# Puntos de evaluacion de la función\n", - "kwh = np.arange(1,250)\n", - "\n", - "fig, axs = plt.subplots(1,3, sharey=False, sharex=True, figsize=(15,5))\n", - "for i, ax in enumerate(axs):\n", - " axs[i].plot(kwh, f[i](kwh), )\n", - " for x_0 in [20, 50, 100, 200]:\n", - " axs[i].plot(kwh, f[i](x_0) + f[i](x_0,1) * (kwh - x_0), linestyle='dashed', color='red')\n", - " print(f'Función {i+1} evaluada en {x_0}: {f[i](x_0):.3f} + {f[i](x_0, 1):.3f} * (x - {x_0})')\n", - " ax.set_xlabel(\"Consumo en kWh\")\n", - " ax.set_ylabel(f\"f {i+1} (x)\")\n", - " ax.set_ylim([-1,100])\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "Formule un modelo general de optimización lineal que le permita a La Lechera Ramírez satisfacer la demanda de sus clientes, al menor costo posible. Para esto usted debe seguir los siguientes pasos: " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Formulación\n", - "\n", - "**1.** Escriba lo(s) conjunto(s), parámetro(s) y variable(s) de decisión que utilizará en el modelo. \n", - "\n", - "### Conjuntos\n", - "- $P$: Plantas\n", - "- $D$: Distribuidores\n", - "\n", - "### Parámetros\n", - "- $b_i$: oferta de leche de la planta $i\\in P$\n", - "- $t_j$: demanda de leche del distribuidor $j\\in D$ \n", - "- $c_{ij}$: costo de envío de un litro de leche de la planta $i\\in P$ al distribuidor $j\\in D$\n", - "\n", - "### Variables de decisión\n", - "- $x_{ij}$: cantidad (en litros) de leche que van de la planta $i\\in P$ al distribuidor $j\\in D$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Restricciones\n", - "**2.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que se debe respetar la oferta de las plantas. \n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "$$\n", - "\\begin{align}\n", - "\\sum_{j\\in D}x_{ij} &\\le b_i, &&\\forall i\\in P.\n", - "\\end{align}\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**3.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que se debe satisfacer la demanda de los distribuidores. \n", - "\n", - "$$\n", - "\\begin{align}\n", - "\\sum_{i\\in P}x_{ij} &\\ge t_j, &&\\forall j\\in D.\n", - "\\end{align}\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**4.** Escriba la(s) restricción(es) que describe(n) matemáticamente el tipo de variable(s) que está utilizando dentro del modelo. \n", - "\n", - "$$\n", - "\\begin{align}\n", - "x_{ij} & \\ge 0, &&\\forall i\\in P,j\\in D.\n", - "\\end{align}\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Función Objetivo\n", - "**5.** Escriba la función objetivo.\n", - "\n", - "$$\n", - "\\text{minimizar } \\sum_{i\\in P}\\sum_{j\\in D}x_{ij}c_{ij}\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Formulación matemática completa" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Conjuntos:**\n", - "- $P$: Plantas\n", - "- $D$: Distribuidores\n", - "\n", - "**Parámetros:**\n", - "- $b_i$: oferta de leche de la planta $i\\in P$\n", - "- $t_j$: demanda de leche del distribuidor $j\\in D$ \n", - "- $c_{ij}$: costo de envío de un litro de leche de la planta $i\\in P$ al distribuidor $j\\in D$\n", - "\n", - "**Variables de decisión:**\n", - "- $x_{ij}$: cantidad (en litros) de leche que van de la planta $i\\in P$ al distribuidor $j\\in D$\n", - "\n", - "**Modelo:**\n", - "\n", - "$$\n", - "\\text{minimizar } \\sum_{i\\in P}\\sum_{j\\in D}x_{ij}c_{ij} \\text{ (1)} \n", - "$$\n", - "\n", - "Sujeto a,\n", - "\n", - "$$\n", - "\\begin{align*}\n", - "\\sum_{j\\in D}x_{ij} &\\le b_i, &&\\forall i\\in P; &(2)\\\\\n", - "\\sum_{i\\in P}x_{ij} &\\ge t_j, &&\\forall j\\in D; &(3)\\\\\n", - "x_{ij} & \\ge 0, &&\\forall i\\in P,j\\in D. &(4)\n", - "\\end{align*}\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "La función objetivo (1) minimiza los costos totales. Las restricciones (2) garantizan que se debe respetar la oferta de las plantas. Las restricciones (3) garantizan que se debe satisfacer la demanda de los distribuidores. Las restricciones (4) describe la naturaleza de la variable $x_{ij}$. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Implementación\n", - "**6.** Resuelva el modelo planteado utilizando la librería de PulP en Python. ¿Cuál es la solución\n", - "óptima del problema? " - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Estado (optimizador): Optimal\n", - "\n", - "Transporte - Costos totales = $ 1224800.0\n", - "\n", - "Variables de decisión\n", - " \tD1\tD2\tD3\tD4\tD5\tD6\tD7\tD8\n", - "Planta 1\t0\t600\t0\t0\t0\t260\t640\t0\t\n", - "Planta 2\t930\t0\t270\t0\t0\t0\t0\t0\t\n", - "Planta 3\t0\t0\t190\t0\t830\t200\t0\t180\t\n", - "Planta 4\t0\t0\t0\t610\t0\t0\t0\t60\t\n" - ] - } - ], - "source": [ - "#se importa la libreria de PulP\n", - "import pulp as lp\n", - "\n", - "#-----------------\n", - "# Conjuntos\n", - "#-----------------\n", - "#Plantas\n", - "P=[\"Planta 1\",\n", - " \"Planta 2\",\n", - " \"Planta 3\",\n", - " \"Planta 4\"]\n", - "\n", - "#Distribuidores\n", - "D=[\"Distribuidor 1\",\n", - " \"Distribuidor 2\",\n", - " \"Distribuidor 3\",\n", - " \"Distribuidor 4\",\n", - " \"Distribuidor 5\",\n", - " \"Distribuidor 6\",\n", - " \"Distribuidor 7\",\n", - " \"Distribuidor 8\"]\n", - "\n", - "# Conjunto con todas las duplas (planta, distribuidor)\n", - "P_x_D = [(planta, distribuidor) for planta in P for distribuidor in D] \n", - "\n", - "#-----------------\n", - "# Parámetros\n", - "#-----------------\n", - "b={#planta: oferta de la planta i\n", - " \"Planta 1\":1500,\n", - " \"Planta 2\":1200,\n", - " \"Planta 3\":1400,\n", - " \"Planta 4\":1000} \n", - "\n", - "t={#distribuidor: demanda del distribuidor j\n", - " \"Distribuidor 1\":930,\n", - " \"Distribuidor 2\":600,\n", - " \"Distribuidor 3\":460,\n", - " \"Distribuidor 4\":610,\n", - " \"Distribuidor 5\":830,\n", - " \"Distribuidor 6\":460,\n", - " \"Distribuidor 7\":640,\n", - " \"Distribuidor 8\":240} \n", - "\n", - "c={#(planta, distribuidor): costo de envio de un litro de leche desde la planta i al distribuidor j\n", - " (\"Planta 1\",\"Distribuidor 1\"):650,\n", - " (\"Planta 1\",\"Distribuidor 2\"):125,\n", - " (\"Planta 1\",\"Distribuidor 3\"):1200,\n", - " (\"Planta 1\",\"Distribuidor 4\"):340,\n", - " (\"Planta 1\",\"Distribuidor 5\"):150,\n", - " (\"Planta 1\",\"Distribuidor 6\"):260,\n", - " (\"Planta 1\",\"Distribuidor 7\"):350,\n", - " (\"Planta 1\",\"Distribuidor 8\"):800,\n", - " (\"Planta 2\",\"Distribuidor 1\"):250,\n", - " (\"Planta 2\",\"Distribuidor 2\"):200,\n", - " (\"Planta 2\",\"Distribuidor 3\"):250,\n", - " (\"Planta 2\",\"Distribuidor 4\"):600,\n", - " (\"Planta 2\",\"Distribuidor 5\"):150,\n", - " (\"Planta 2\",\"Distribuidor 6\"):950,\n", - " (\"Planta 2\",\"Distribuidor 7\"):1050,\n", - " (\"Planta 2\",\"Distribuidor 8\"):1000,\n", - " (\"Planta 3\",\"Distribuidor 1\"):600,\n", - " (\"Planta 3\",\"Distribuidor 2\"):350,\n", - " (\"Planta 3\",\"Distribuidor 3\"):400,\n", - " (\"Planta 3\",\"Distribuidor 4\"):260,\n", - " (\"Planta 3\",\"Distribuidor 5\"):150,\n", - " (\"Planta 3\",\"Distribuidor 6\"):300,\n", - " (\"Planta 3\",\"Distribuidor 7\"):450,\n", - " (\"Planta 3\",\"Distribuidor 8\"):600,\n", - " (\"Planta 4\",\"Distribuidor 1\"):450,\n", - " (\"Planta 4\",\"Distribuidor 2\"):800,\n", - " (\"Planta 4\",\"Distribuidor 3\"):650,\n", - " (\"Planta 4\",\"Distribuidor 4\"):250,\n", - " (\"Planta 4\",\"Distribuidor 5\"):340,\n", - " (\"Planta 4\",\"Distribuidor 6\"):700,\n", - " (\"Planta 4\",\"Distribuidor 7\"):600,\n", - " (\"Planta 4\",\"Distribuidor 8\"):620} \n", - "\n", - "#-------------------------------------\n", - "# Creación del objeto problema en PuLP\n", - "#-------------------------------------\n", - "#Crea el problema para cargarlo con la instancia \n", - "problema=lp.LpProblem(\"Transporte\",lp.LpMinimize)\n", - "\n", - "#-----------------------------\n", - "# Variables de Decisión\n", - "#-----------------------------\n", - "x=lp.LpVariable.dicts('x',P_x_D,lowBound=0,cat='Continuous') #litros de leche que van de la planta i al distribuidor j;\n", - " #aca se añade de una vez la naturaleza de las variables\n", - "\n", - "#-----------------------------\n", - "# Función objetivo\n", - "#-----------------------------\n", - "#Crea la expresión de minimización de costos\n", - "problema+=lp.lpSum(x[i,j]*c[i,j] for i in P for j in D), \"Costos Totales\"\n", - "\n", - "#-----------------------------\n", - "# Restricciones\n", - "#-----------------------------\n", - "#sum(j in D)x_ij <= b_i forall i in P\n", - "for i in P:\n", - " problema+= lp.lpSum(x[i,j] for j in D) <= b[i], \"Oferta de la planta \"+i #se respeta la oferta de cada planta \n", - "\n", - "#sum(i in P)x_ij >= t_j forall j in D\n", - "for j in D:\n", - " problema+= lp.lpSum(x[i,j] for i in P) >= t[j], \"Demanda del distribuidor \"+j #se satisface la demanda de cada distribuidor \n", - " \n", - "#-----------------------------\n", - "# Imprimir formato LP\n", - "#-----------------------------\n", - "#Escribe el problema en un archivo con formato LP \n", - "problema.writeLP(\"Transporte.lp\")\n", - "\n", - "#-----------------------------\n", - "# Invocar el optimizador\n", - "#-----------------------------\n", - "#Optimizar el modelo con CBC (default de PuLP)\n", - "problema.solve()\n", - "\n", - "#-----------------------------\n", - "# Imprimir resultados\n", - "#-----------------------------\n", - "#Imprimir estado final del optimizador\n", - "print(\"Estado (optimizador):\", lp.LpStatus[problema.status],end='\\n')\n", - "\n", - "#Valor óptimo del plan de transporte \n", - "print(\"\\nTransporte - Costos totales = $\", round(lp.value(problema.objective),2))\n", - "print()\n", - "\n", - "#Imprimir variables de decisión\n", - "print(\"Variables de decisión\")\n", - "print(\" \",\"D1\",\"D2\",\"D3\",\"D4\",\"D5\",\"D6\",\"D7\",\"D8\",sep='\\t')\n", - "for i in P:\n", - " print(i,end='\\t')\n", - " for j in D: \n", - " print(round(x[i,j].value()),end='\\t')\n", - " print()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Créditos\n", - "\n", - "Equipo de Optimización
\n", - "Instancia: Camilo Aguilar, Juan Felipe Rengifo
\n", - "Fecha: 20/09/2020" - ] - } - ], - "metadata": { - "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.5" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} +{ + +"cells": [ + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "# CryptOR" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "Tags: Funciones a trozos" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "## Enunciado\n", + + "CryptOR is una compañía que se dedica a minar criptomonedas. El mayor problema de planeación para CryptOR es la compra de energía. Dado el alto consumo de energía, CryptOR debe negociar contratos para los próximos 12 meses con las diferentes empresas de generación eléctrica. El costo por kilovatio-hora (kWh) varía según la cantidad de energía contratada y la empresa generadora. El costo total en función del consumo está representado por funciones no lineales suministradas por cada generadora. Así mismo, cada empresa generadora establece la duración de cada contrato que se firme con la misma y el consumo máximo mensual que pueden suministrar. Los contratos de cada generadora se pueden renovar múltiples veces durante los 12 meses de planeación, pero estos no se deben traslapar. Finalmente, se conoce un pronóstico de la demanda de energía en kWh que se debe satisfacer sin holgura. Las Tablas 1 y 2 resumen toda la información disponible. " + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "### Tabla 1. Términos de los contratos para cada generadora.\n", + + "\n", + + "| |**Función de costo** | **Duración del contrato**| **Consumo máximo mensual**|\n", + + "|:-------------------:|:----------------------------------------:|:------------------------:|:-------------------------:|\n", + + "|**Generadora Carbón**|$f_1(x) = 0.0012 x^2$ | 2 meses | 250 kWh |\n", + + "|**Generadora Solar** |$f_2(x) = \\begin{cases}0.0028 x^2 - 0.5x + 35 \\ \\ x>0 \\\\ 0 \\ \\ x=0 \\end{cases}$ | 4 meses | 250 kWh |\n", + + "|**Generadora Eólica**|$f_3(x) = \\begin{cases}0.5 x log(\\frac{x}{150}) + 30 \\ \\ x>0 \\\\ 0 \\ \\ x=0 \\end{cases}$ | 3 meses | 250 kWh |\n", + + "\n", + + "### Tabla 2. Demanda mensual en kWh.\n", + + "|Mes| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12|\n", + + "|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|\n", + + "|demanda| 100| 150| 300| 300| 300| 500| 400| 400| 200| 200| 200| 200|" + + ] + + }, + + { + + "cell_type": "code", + + "execution_count": null, + + "metadata": {}, + + "outputs": [], + + "source": [ + + "import matplotlib.pyplot as plt\n", + + "import numpy as np\n", + + "\n", + + "def f1(x):\n", + + " # Función de costo de la generadora carbón\n", + + " return 0.0012 * (x ** 2)\n", + + "def f2(x):\n", + + " # Función de costo de la generadora solar\n", + + " return 0.0028 * x ** 2 - 0.5*x + 35\n", + + "def f3(x):\n", + + " # Función de costo de la generadora eólica\n", + + " return 0.5 * x*np.log(x/150) + 30\n", + + "\n", + + "# Puntos de evaluación de la función\n", + + "kwh = np.arange(1,250)\n", + + "\n", + + "fig, axs = plt.subplots(1,3, sharey=False, sharex=True, figsize=(15,5))\n", + + "axs[0].plot(kwh, f1(kwh))\n", + + "axs[1].plot(kwh, f2(kwh))\n", + + "axs[2].plot(kwh, f3(kwh))\n", + + "for ax_ix, ax in enumerate(axs):\n", + + " ax.set_xlabel(\"Consumo en kWh\")\n", + + " ax.set_ylabel(f\"f {ax_ix+1} (x)\")\n", + + " ax.set_ylim([0,100])\n", + + "\n" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "## Linealización a trozos\n", + + "\n", + + "Optimizar utilizando las funciones $f_1(x)$, $f_2(x)$ y $f_3(x)$ es computacionalmente más difícil debido a que son funciones no lineales. Sin embrago, dado que son funciones [convexas](https://es.wikipedia.org/wiki/Funci%C3%B3n_convexa) es posible aproximarlas con múltiples funciones lineales. Dada una función convexa $f(x)$, la función $g(x;x_0) = f(x_0) + f'(x_0) * (x-x0)$ es una aproximación de [primer orden](https://es.wikipedia.org/wiki/Serie_de_Taylor), la cual es exacta en $x_0$ y se degrada a medida que $x$ se aleja de $x_0$. Con esta idea en mente, cualquier función convexa se puede aproximar generando múltiples funciones de forma $g(x;x_0)$ para diferentes valores de $x_0$. La siguiente celda muestra la función $f(x) = (x - 4)^2$ (en azul) y su aproximación (en rojo) utilizando 4 rectas correspondientes a $g(x;x_0)$ para $x_0=0,3,5,8$." + + ] + + }, + + { + + "cell_type": "code", + + "execution_count": null, + + "metadata": {}, + + "outputs": [], + + "source": [ + + "import matplotlib.pyplot as plt\n", + + "import numpy as np\n", + + "\n", + + "def f(x, orden=0):\n", + + " if orden == 0:\n", + + " # Función (x-4) ^ 2\n", + + " return (x-4) ** 2 \n", + + " else:\n", + + " # Derivada evaluada en x\n", + + " return 2 *(x - 4)\n", + + "\n", + + "# Puntos de evaluacion de la función\n", + + "dominio = np.arange(-2,10,0.01)\n", + + "\n", + + "fig, axs = plt.subplots(1,1, sharey=False, sharex=True, figsize=(15,5))\n", + + "axs.plot(dominio, f(dominio))\n", + + "for x_0 in [0, 3, 5, 8]:\n", + + " axs.plot(dominio, f(x_0) + f(x_0,1) * (dominio - x_0), linestyle='dashed', color='red')\n", + + " print(f'Función evaluada en {x_0}: {f(x_0):.1f} + {f(x_0, 1):.1f} * (x - {x_0})')\n", + + "axs.set_xlabel(\"Consumo en kWh\")\n", + + "axs.set_ylabel(f\"f(x)\")\n", + + "axs.set_ylim([-2,40])\n" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "### Optimizando con la aproximación\n", + + "Para una función convexa, $f(x)$, los siguientes problemas son equivalentes:\n", + + " $$\n", + + "\\begin{align*}\n", + + "\\min & f(x) &= \\ \\ \\min \\ \\ &z \\\\ \n", + + "&x\\in \\mathbb{R}. & & z \\geq f(x), \\\\\n", + + "& & & x \\in \\mathbb{R}.\n", + + "\\end{align*}\n", + + "$$\n", + + "Asi mismo, $f(x)\\geq g(x,x_0)$ para cualquier valor de $x_0$. \n", + + "\n", + + "Con estas dos observaciones, el problema original, $\\min_{x\\in\\mathbb{R}} (x-4)^2$, lo podemos aproximar con el siguiente modelo:\n", + + " $$\n", + + "\\begin{align*}\n", + + "\\min \\ \\ &z \\\\ \n", + + " & z \\geq 16 -8 * (x - 0) \\\\\n", + + " & z \\geq 1 -2 * (x - 3) \\\\\n", + + " & z \\geq 1 + 2 * (x - 5) \\\\\n", + + " & z \\geq 16 + 8 * (x - 8) \\\\\n", + + " & x \\in \\mathbb{R} \n", + + "\\end{align*}\n", + + "$$\n" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "### Funciones de costo aproximadas\n", + + "Volviendo al problema de cryptOR, una posible aproximación se muestra a continuación. " + + ] + + }, + + { + + "cell_type": "code", + + "execution_count": null, + + "metadata": {}, + + "outputs": [], + + "source": [ + + "import matplotlib.pyplot as plt\n", + + "import numpy as np\n", + + "\n", + + "def f1(x, orden=0):\n", + + " if orden == 0:\n", + + " # Función de costo de la generadora carbón\n", + + " return 0.0012 * (x ** 2) \n", + + " else:\n", + + " # Derivada evaluada en x\n", + + " return 0.0012 * 2 * x\n", + + "\n", + + "def f2(x, orden=0):\n", + + " if orden == 0:\n", + + " # Función de costo de la generadora solar\n", + + " return 0.0028 * x ** 2 - 0.5*x + 35\n", + + " else:\n", + + " # Derivada evaluada en x\n", + + " return 2 * 0.0028 * x - 0.5\n", + + "def f3(x, orden=0):\n", + + " if orden == 0:\n", + + " # Función de costo de la generadora eólica\n", + + " return 0.5 * x*np.log(x/150) + 30\n", + + " else:\n", + + " # Derivada evaluada en x\n", + + " return 0.5 * np.log(x/150) + 0.5\n", + + "\n", + + "# Funciones de costo\n", + + "f = [f1,f2,f3]\n", + + "# Puntos de evaluación de la función\n", + + "kwh = np.arange(1,250)\n", + + "\n", + + "fig, axs = plt.subplots(1,3, sharey=False, sharex=True, figsize=(15,5))\n", + + "for i, ax in enumerate(axs):\n", + + " axs[i].plot(kwh, f[i](kwh), )\n", + + " for x_0 in [20, 50, 100, 200]:\n", + + " axs[i].plot(kwh, f[i](x_0) + f[i](x_0,1) * (kwh - x_0), linestyle='dashed', color='red')\n", + + " print(f'Función {i+1} evaluada en {x_0}: {f[i](x_0):.3f} + {f[i](x_0, 1):.3f} * (x - {x_0})')\n", + + " ax.set_xlabel(\"Consumo en kWh\")\n", + + " ax.set_ylabel(f\"f {i+1} (x)\")\n", + + " ax.set_ylim([-1,100])\n" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "
\n", + + "Formule un modelo general de optimización lineal que le permita a CryptOR satisfacer la demanda de energía al mínimo costo y satisfaciendo las condiciones de los contratos. Para esto usted debe seguir los siguientes pasos: " + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "## Formulación\n", + + "\n", + + "**1.** Escriba lo(s) conjunto(s), parámetro(s) y variable(s) de decisión que utilizará en el modelo. \n", + + "\n", + + "### Conjuntos\n", + + "- $P$: Generadoras\n", + + "- $T$: Periodos de planeación\n", + + "\n", + + "### Parámetros\n", + + "- $d_t$: demanda de energía en kWh para el mes $t\\in T$\n", + + "- $b_i$: Consumo máximo mensual de la generadora $i\\in G$\n", + + "- $m_i$: Duración de cada contrato de la generadora $i\\in G$\n", + + "- $a_{ik}$: intercepto de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", + + "- $p_{ik}$: pendiente de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", + + "\n", + + "### Variables de decisión\n", + + "- $x_{it}$: cantidad de kWh contratados a la generadora $i\\in G$ para el mes $t\\in T$\n", + + "- $y_{it}$: variable binaria que indica si un nuevo contrato se firma con la generadora $i\\in G$ en el mes $t\\in T$\n", + + "- $v_{it}$: variable binaria que indica si un contrato con la generadora $i\\in G$ esta vigente en el mes $t\\in T$\n", + + "- $z_{it}$: costo total por consumo de energía de la generadora $i\\in G$ en el mes $t\\in T$" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "### Restricciones\n", + + "**2.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que se debe respetar la demanda exacta en cada mes. \n" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "$$\n", + + "\\begin{align*}\n", + + "\\sum_{i \\in G}x_{it} = d_t \\ \\ \\forall t \\in T.\n", + + "\\end{align*}\n", + + "$$" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "**3.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que la cantidad de kWh contratados no superan el consumo máximo mensual en los meses en donde hay un contrato vigente.\n", + + "$$\n", + + "\\begin{align*}\n", + + "x_{it} \\leq b_i v_{it} \\forall i \\in G, t \\in T.\n", + + "\\end{align*}\n", + + "$$" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "**4.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que si un contrato se firma, debe estar vigente por la duración estipulada, y que solo se puede haber un contrato vigente si se firmó previamente o en el mismo mes.\n", + + "$$\n", + + "\\begin{align*}\n", + + "\\sum_{t' \\in \\{\\max\\{t-m_i+1, 1\\}, \\ldots, t\\}}y_{it'} \\geq v_{it} \\ \\ \\forall i \\in G, t \\in T. \\\\ \n", + + "|\\{t, \\ldots, \\min\\{t+m_i-1,12\\}\\}|y_{it} \\leq \\sum_{t' \\in \\{t, \\ldots, \\min\\{t+m_i-1,12\\}\\}}v_{it} \\ \\ \\forall i \\in G, t \\in T. \\\\ \n", + + "\\end{align*}\n", + + "$$" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "**4.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que los contratos con cada generadora no se deben traslapar.\n", + + "$$\n", + + "\\begin{align*}\n", + + "\\sum_{t' \\in \\{t, \\ldots, t+m_i-1\\}}y_{it'} \\leq 1 \\ \\ \\forall i \\in G, t \\in T.\n", + + "\\end{align*}\n", + + "$$" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "**4.** Escriba la(s) restricción(es) lineal(es) que modelan las funciones de costo con expresiones lineales. Note que si no hay un contrato vigente en un mes particular, el costo es cero.\n", + + "$$\n", + + "\\begin{align*}\n", + + "z_{it} \\geq a_{ik} + p_{ik} x_{it} - M(1-v_{it}) \\ \\ \\forall i \\in G, t \\in T, k \\in \\{1,2,3,4\\}\n", + + "\\end{align*}\n", + + "$$" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "**4.** Escriba la(s) restricción(es) que describe(n) matemáticamente el tipo de variable(s) que está utilizando dentro del modelo. \n", + + "\n", + + "$$\n", + + "\\begin{align*}\n", + + "x_{it} & \\ge 0 \\ \\ &&\\forall i\\in G,t\\in T.\\\\\n", + + "y_{it} & \\in\\{0,1\\} \\ \\ &&\\forall i\\in G,t\\in T.\\\\\n", + + "v_{it} & \\in \\{0,1\\} \\ \\ &&\\forall i\\in G,t\\in T.\\\\\n", + + "z_{it} & \\ge 0 \\ \\ &&\\forall i\\in G,t\\in D.\\\\\n", + + "\\end{align*}\n", + + "$$" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "### Función Objetivo\n", + + "**5.** Escriba la función objetivo.\n", + + "\n", + + "$$\n", + + "\\text{minimizar } \\sum_{i\\in P}\\sum_{t\\in T}z_{it}\n", + + "$$" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "## Formulación matemática completa" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "## Formulación\n", + + "\n", + + "**1.** Escriba lo(s) conjunto(s), parámetro(s) y variable(s) de decisión que utilizará en el modelo. \n", + + "\n", + + "### Conjuntos\n", + + "- $P$: Generadoras\n", + + "- $T$: Periodos de planeación\n", + + "\n", + + "### Parámetros\n", + + "- $d_t$: demanda de energía en kWh para el mes $t\\in T$\n", + + "- $b_i$: Consumo máximo mensual de la generadora $i\\in G$\n", + + "- $m_i$: Duración de cada contrato de la generadora $i\\in G$\n", + + "- $a_{ik}$: intercepto de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", + + "- $p_{ik}$: pendiente de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", + + "\n", + + "### Variables de decisión\n", + + "- $x_{it}$: cantidad de kWh contratados a la generadora $i\\in G$ para el mes $t\\in T$\n", + + "- $y_{it}$: variable binaria que indica si un nuevo contrato se firma con la generadora $i\\in G$ en el mes $t\\in T$\n", + + "- $v_{it}$: variable binaria que indica si un contrato con la generadora $i\\in G$ está vigente en el mes $t\\in T$\n", + + "- $z_{it}$: costo total por consumo de energía de la generadora $i\\in G$ en el mes $t\\in T$\n", + + "\n", + + "**Modelo:**\n", + + "\n", + + "$$\n", + + "\\begin{align*}\n", + + "\n", + + "&\\text{minimizar } & \\sum_{i\\in P}\\sum_{t\\in T}z_{it} &&(1)\\\\\n", + + "&\\text{sujeto a}&&& \\\\\n", + + "&&\\sum_{i \\in G}x_{it} = d_t \\ \\ \\ \\ & \\forall t \\in T; &(2) \\\\\n", + + "&&x_{it} \\leq b_i v_{it} \\ \\ \\ \\ & \\forall i \\in G, t \\in T;&(3)\\\\\n", + + "&&\\sum_{t' \\in \\{\\max\\{t-m_i+1, 1\\}, \\ldots, t\\}}y_{it'} \\geq v_{it} \\ \\ \\ \\ & \\forall i \\in G, t \\in T; &(4)\\\\ \n", + + "&&|\\{t, \\ldots, \\min\\{t+m_i-1,12\\}\\}|y_{it} \\leq \\sum_{t' \\in \\{t, \\ldots, \\min\\{t+m_i-1,12\\}\\}}v_{it} \\ \\ \\ \\ & \\forall i \\in G, t \\in T;&(5)\\\\\n", + + "&&\\sum_{t' \\in \\{t, \\ldots, t+m_i-1\\}}y_{it'} \\leq 1 \\ \\ \\ \\ & \\forall i \\in G, t \\in T;&(6) \\\\ \n", + + "&&z_{it} \\geq a_{ik} + p_{ik} x_{it} - M(1-v_{it}) \\ \\ \\ \\ & \\forall i \\in G, t \\in T, k \\in \\{1,2,3,4\\};&(7) \\\\\n", + + "&&x_{it} \\ge 0 \\ \\ \\ \\ &\\forall i\\in G,t\\in T; &(8)\\\\\n", + + "&&y_{it} \\in\\{0,1\\} \\ \\ \\ \\ &\\forall i\\in G,t\\in T;\\\\\n", + + "&&v_{it} \\in \\{0,1\\} \\ \\ \\ \\ &\\forall i\\in G,t\\in T;\\\\\n", + + "&&z_{it} \\ge 0 \\ \\ \\ \\ &\\forall i\\in G,t\\in D.\n", + + "\\end{align*}\n", + + "$$" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "## Implementación\n", + + "**6.** Resuelva el modelo planteado utilizando la librería de PulP en Python. ¿Cuál es la solución\n", + + "óptima del problema? " + + ] + + }, + + { + + "cell_type": "code", + + "execution_count": null, + + "metadata": { + + "scrolled": true + + }, + + "outputs": [], + + "source": [ + + "#Importar librerías\n", + + "import pulp as lp\n", + + "import numpy as np\n", + + "from itertools import product\n", + + "\n", + + "#-----------------\n", + + "# Conjuntos\n", + + "#-----------------\n", + + "# Generadoras\n", + + "G=[\"Generadora 1\",\"Generadora 2\",\"Generadora 3\",]\n", + + "\n", + + "# Periodos de planeación\n", + + "T = list(range(1,12+1)) # range excluye el final del intervalo.\n", + + "\n", + + "# Conjunto de tuplas (i,t) donde i es una generadora\n", + + "# en G y t es un periodo de tiempo en T. \n", + + "G_x_T = list(product(G,T))\n", + + "\n", + + "#-----------------\n", + + "# Parámetros\n", + + "#-----------------\n", + + "d={# Periodo: demanda en kWh\n", + + " 1: 100, 2: 150, 3: 150, 4: 200, 5: 100, 6: 100,\n", + + " 7: 400, 8: 100, 9: 100, 10: 100, 11: 100, 12: 100} \n", + + "b={# Generadora: consumo maximo en kWh\n", + + " \"Generadora 1\":250,\n", + + " \"Generadora 2\":250,\n", + + " \"Generadora 3\":250}\n", + + "\n", + + "m={# Generadora: duración de por contrato en meses\n", + + " \"Generadora 1\":2,\n", + + " \"Generadora 2\":4,\n", + + " \"Generadora 3\":3}\n", + + "\n", + + "# Funciones de aproximación\n", + + "# Función 1 evaluada en 20: 0.480 + 0.048 * (x - 20)\n", + + "# Función 1 evaluada en 50: 3.000 + 0.120 * (x - 50)\n", + + "# Función 1 evaluada en 100: 12.000 + 0.240 * (x - 100)\n", + + "# Función 1 evaluada en 200: 48.000 + 0.480 * (x - 200)\n", + + "# Función 2 evaluada en 20: 26.120 + -0.388 * (x - 20)\n", + + "# Función 2 evaluada en 50: 17.000 + -0.220 * (x - 50)\n", + + "# Función 2 evaluada en 100: 13.000 + 0.060 * (x - 100)\n", + + "# Función 2 evaluada en 200: 47.000 + 0.620 * (x - 200)\n", + + "# Función 3 evaluada en 20: 9.851 + -0.507 * (x - 20)\n", + + "# Función 3 evaluada en 50: 2.535 + -0.049 * (x - 50)\n", + + "# Función 3 evaluada en 100: 9.727 + 0.297 * (x - 100)\n", + + "# Función 3 evaluada en 200: 58.768 + 0.644 * (x - 200)\n", + + "f={#Generadora: lista de tuplas (a,p), donde \"a\" es el \n", + + " # intercepto y \"p\" la pendiente de una función\n", + + " # aproximando el costo de la generadora\n", + + " \"Generadora 1\":[(0.48 - 0.048*20, 0.048),\n", + + " (3.0 - 0.12*50, 0.12),\n", + + " (12 - 0.24*100, 0.24),\n", + + " (48 - 0.48*200, 0.48)],\n", + + " \"Generadora 2\":[(26.12 + 0.388*20, -0.388),\n", + + " (17 + 0.22*50, -0.22),\n", + + " (13 - 0.06*100, 0.06),\n", + + " (47 - 0.62*200, 0.62)],\n", + + " \"Generadora 3\":[(9.851 + 0.507*20, -0.507),\n", + + " (2.535 + 0.049*50, -0.049),\n", + + " (9.727 - 0.297*100 , 0.297),\n", + + " (58.768 - 0.644*200, 0.644)]}\n", + + "\n", + + "#-------------------------------------\n", + + "# Creación del objeto problema en PuLP\n", + + "#-------------------------------------\n", + + "#Crea el problema para cargarlo con la instancia \n", + + "problema=lp.LpProblem(\"CryptOT\",lp.LpMinimize)\n", + + "\n", + + "#-----------------------------\n", + + "# Variables de Decisión\n", + + "#-----------------------------\n", + + "# Consumo mensual (en kWh) de la generadora i en G en el periodo\n", + + "# de tiempo t en T\n", + + "limite_superior_x = np.max([b[i] for i in G])\n", + + "x=lp.LpVariable.dicts('x', G_x_T, lowBound=0, upBound=limite_superior_x,\n", + + " cat=lp.const.LpContinuous)\n", + + "\n", + + "# Variable binaria que indica si un nuevo contrato es firmado con la\n", + + "# generadora i en G en el periodo de tiempo t en T\n", + + "y=lp.LpVariable.dicts('y', G_x_T, cat=lp.const.LpBinary)\n", + + "\n", + + "# Variable binaria que indica si hay un contrato vigente con la\n", + + "# generadora i en G en el periodo de tiempo t en T\n", + + "v=lp.LpVariable.dicts('v', G_x_T, cat=lp.const.LpBinary)\n", + + "\n", + + "\n", + + "# Variable auxiliar para calcular el costo por consumo asociado\n", + + "# a la generadora i en G en el periodo de tiempo t en T\n", + + "z=lp.LpVariable.dicts('z', G_x_T, lowBound=0, cat=lp.const.LpContinuous)\n", + + "\n", + + "#-----------------------------\n", + + "# Función objetivo\n", + + "#-----------------------------\n", + + "#Crea la expresión de minimización de costos\n", + + "problema+=lp.lpSum(z[i,t] for i in G for t in T), \"Costo anual\"\n", + + "\n", + + "#-----------------------------\n", + + "# Restricciones\n", + + "#-----------------------------\n", + + "\n", + + "\n", + + "# Satisfacción de la demanda\n", + + "# sum(i in G)x_it = d_t forall t in T\n", + + "for t in T:\n", + + " problema+= lp.lpSum(x[i,t] for i in G) == d[t], f\"Satisfacción de la demanda en el mes {t}\" \n", + + "\n", + + "# Relación entre consumo y contratos vigentes\n", + + "# x_it <= b_i * v_it forall i in G, t in T\n", + + "for (i,t) in G_x_T:\n", + + " problema+= x[i,t] <= b[i]*v[i,t], f\"Consumo de la generadora {i} en el mes {t}\" \n", + + "\n", + + "# Duracion de los contratos\n", + + "for (i,t) in G_x_T:\n", + + " # Periodos en los que podría ser firmado un contrato para que este vigente en t.\n", + + " T_f = [tt for tt in range(t - m[i] + 1, t + 1) if tt>=1] \n", + + " problema+= sum(y[i,tt] for tt in T_f) >= v[i,t], f\"Vigencia en el mes {t} de contratos de la Generadora {i} parte 1\"\n", + + " # Periodos vigentes si se firma un contrato en t\n", + + " T_v = [tt for tt in range(t, t + m[i]) if tt<=12] \n", + + " problema+= len(T_v) * y[i,t] <= sum(v[i,tt] for tt in T_v), f\"Vigencia en el mes {t} de contratos de la Generadora {i} parte 2\"\n", + + "\n", + + "# Máximo un contrato vigente por generadora en cada mes\n", + + "# sum(tt in [t, ..., t+m_i-1])y_i,tt <= 1 forall i in G, t in T\n", + + "for (i,t) in G_x_T:\n", + + " # Periodos vigentes si se firma un contrato en t\n", + + " T_v = [tt for tt in range(t, t + m[i]) if tt<=12] \n", + + " problema+= lp.lpSum(y[i,tt] for tt in T_v) <= 1, f\"Limite de nuevos contratos de la Generadora {i} firmados en el mes {t}\" \n", + + "\n", + + "# Función aproximada a trozos\n", + + "# z_it >= a_ik * p_ik * x_it - M(1-v_it)forall i in G, t in T, k = 1,...,numero_de_funciones\n", + + "M = 100\n", + + "for (i,t) in G_x_T:\n", + + " for k, (a,p) in enumerate(f[i]):\n", + + " problema+= z[i,t] >= a+ p*x[i,t] - M * (1-v[i,t]), f\"Aproximación {k} del costo por consumo de la generadora {i} en el mes {t}\" \n", + + "\n", + + "#-----------------------------\n", + + "# Imprimir formato LP\n", + + "#-----------------------------\n", + + "#Escribe el problema en un archivo con formato LP \n", + + "problema.writeLP(\"CryptOR.lp\")\n", + + "\n", + + "#-----------------------------\n", + + "# Invocar el optimizador\n", + + "#-----------------------------\n", + + "#Optimizar el modelo con CBC (default de PuLP)\n", + + "problema.solve()\n", + + "\n", + + "#-----------------------------\n", + + "# Imprimir resultados\n", + + "#-----------------------------\n", + + "#Imprimir estado final del optimizador\n", + + "print(\"Estado (optimizador):\", lp.LpStatus[problema.status],end='\\n')\n", + + "\n", + + "#Valor óptimo del plan de transporte \n", + + "print(\"\\n Costos totales = $\", round(lp.value(problema.objective),2))\n", + + "print()\n", + + "\n", + + "#Imprimir variables de decisión\n", + + "print(\"Variables de decisión\")\n", + + "tap_ = \"\"\n", + + "print(f'{\"Mes\":10s} {tap_.join(f\"{t:>8d}\" for t in T)}')\n", + + " \n", + + "for i in G:\n", + + " print(f'{i:10s} {tap_.join(f\"{x[i,t].value():>8.2f}\" for t in T)}')\n", + + " print(f'{\"Nuevo\":10s} {tap_.join(f\"{y[i,t].value():>8.0f}\" for t in T)}')\n", + + " print(f'{\"Vigente\":10s} {tap_.join(f\"{v[i,t].value():>8.0f}\" for t in T)}')" + + ] + + }, + + { + + "cell_type": "markdown", + + "metadata": {}, + + "source": [ + + "## Créditos\n", + + "Instancia: Daniel Duque
\n", + + "Fecha: 21/12/2021" + + ] + + } + +], + +"metadata": { + + "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.5" + + } + +}, + +"nbformat": 4, + +"nbformat_minor": 4 + +} From ed7d45f0f6ee59232860695a844101461934443f Mon Sep 17 00:00:00 2001 From: Daniel Duque Date: Tue, 21 Dec 2021 21:19:11 -0500 Subject: [PATCH 4/9] Lint notebooks. --- optimizacion/Enunciados/CryptOR.ipynb | 1703 +++++++--------------- optimizacion/Soluciones/CryptOR.ipynb | 1892 +++++++++---------------- 2 files changed, 1205 insertions(+), 2390 deletions(-) diff --git a/optimizacion/Enunciados/CryptOR.ipynb b/optimizacion/Enunciados/CryptOR.ipynb index 9fe4b85..3a5ebe7 100644 --- a/optimizacion/Enunciados/CryptOR.ipynb +++ b/optimizacion/Enunciados/CryptOR.ipynb @@ -1,1195 +1,508 @@ -{ - -"cells": [ - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "# CryptOR" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "Tags: Funciones a trozos" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "## Enunciado\n", - - "CryptOR is una compañía que se dedica a minar criptomonedas. El mayor problema de planeación para CryptOR es la compra de energía. Dado el alto consumo de energía, CryptOR debe negociar contratos para los próximos 12 meses con las diferentes empresas de generación eléctrica. El costo por kilovatio-hora (kWh) varía según la cantidad de energía contratada y la empresa generadora. El costo total en función del consumo está representado por funciones no lineales suministradas por cada generadora. Así mismo, cada empresa generadora establece la duración de cada contrato que se firme con la misma y el consumo máximo mensual que pueden suministrar. Los contratos de cada generadora se pueden renovar múltiples veces durante los 12 meses de planeación, pero estos no se deben traslapar. Finalmente, se conoce un pronóstico de la demanda de energía en kWh que se debe satisfacer sin holgura. Las Tablas 1 y 2 resumen toda la información disponible. " - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "### Tabla 1. Términos de los contratos para cada generadora.\n", - - "\n", - - "| |**Función de costo** | **Duración del contrato**| **Consumo máximo mensual**|\n", - - "|:-------------------:|:----------------------------------------:|:------------------------:|:-------------------------:|\n", - - "|**Generadora Carbón**|$f_1(x) = 0.0012 x^2$ | 2 meses | 250 kWh |\n", - - "|**Generadora Solar** |$f_2(x) = \\begin{cases}0.0028 x^2 - 0.5x + 35 \\ \\ x>0 \\\\ 0 \\ \\ x=0 \\end{cases}$ | 4 meses | 250 kWh |\n", - - "|**Generadora Eólica**|$f_3(x) = \\begin{cases}0.5 x log(\\frac{x}{150}) + 30 \\ \\ x>0 \\\\ 0 \\ \\ x=0 \\end{cases}$ | 3 meses | 250 kWh |\n", - - "\n", - - "### Tabla 2. Demanda mensual en kWh.\n", - - "|Mes| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12|\n", - - "|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|\n", - - "|demanda| 100| 150| 300| 300| 300| 500| 400| 400| 200| 200| 200| 200|" - - ] - - }, - - { - - "cell_type": "code", - - "execution_count": null, - - "metadata": {}, - - "outputs": [], - - "source": [ - - "import matplotlib.pyplot as plt\n", - - "import numpy as np\n", - - "\n", - - "def f1(x):\n", - - " # Función de costo de la generadora carbón\n", - - " return 0.0012 * (x ** 2)\n", - - "def f2(x):\n", - - " # Función de costo de la generadora solar\n", - - " return 0.0028 * x ** 2 - 0.5*x + 35\n", - - "def f3(x):\n", - - " # Función de costo de la generadora eólica\n", - - " return 0.5 * x*np.log(x/150) + 30\n", - - "\n", - - "# Puntos de evaluación de la función\n", - - "kwh = np.arange(1,250)\n", - - "\n", - - "fig, axs = plt.subplots(1,3, sharey=False, sharex=True, figsize=(15,5))\n", - - "axs[0].plot(kwh, f1(kwh))\n", - - "axs[1].plot(kwh, f2(kwh))\n", - - "axs[2].plot(kwh, f3(kwh))\n", - - "for ax_ix, ax in enumerate(axs):\n", - - " ax.set_xlabel(\"Consumo en kWh\")\n", - - " ax.set_ylabel(f\"f {ax_ix+1} (x)\")\n", - - " ax.set_ylim([0,100])\n", - - "\n" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "## Linealización a trozos\n", - - "\n", - - "Optimizar utilizando las funciones $f_1(x)$, $f_2(x)$ y $f_3(x)$ es computacionalmente más difícil debido a que son funciones no lineales. Sin embrago, dado que son funciones [convexas](https://es.wikipedia.org/wiki/Funci%C3%B3n_convexa) es posible aproximarlas con múltiples funciones lineales. Dada una función convexa $f(x)$, la función $g(x;x_0) = f(x_0) + f'(x_0) * (x-x0)$ es una aproximación de [primer orden](https://es.wikipedia.org/wiki/Serie_de_Taylor), la cual es exacta en $x_0$ y se degrada a medida que $x$ se aleja de $x_0$. Con esta idea en mente, cualquier función convexa se puede aproximar generando múltiples funciones de forma $g(x;x_0)$ para diferentes valores de $x_0$. La siguiente celda muestra la función $f(x) = (x - 4)^2$ (en azul) y su aproximación (en rojo) utilizando 4 rectas correspondientes a $g(x;x_0)$ para $x_0=0,3,5,8$." - - ] - - }, - - { - - "cell_type": "code", - - "execution_count": null, - - "metadata": {}, - - "outputs": [], - - "source": [ - - "import matplotlib.pyplot as plt\n", - - "import numpy as np\n", - - "\n", - - "def f(x, orden=0):\n", - - " if orden == 0:\n", - - " # Función (x-4) ^ 2\n", - - " return (x-4) ** 2 \n", - - " else:\n", - - " # Derivada evaluada en x\n", - - " return 2 *(x - 4)\n", - - "\n", - - "# Puntos de evaluacion de la función\n", - - "dominio = np.arange(-2,10,0.01)\n", - - "\n", - - "fig, axs = plt.subplots(1,1, sharey=False, sharex=True, figsize=(15,5))\n", - - "axs.plot(dominio, f(dominio))\n", - - "for x_0 in [0, 3, 5, 8]:\n", - - " axs.plot(dominio, f(x_0) + f(x_0,1) * (dominio - x_0), linestyle='dashed', color='red')\n", - - " print(f'Función evaluada en {x_0}: {f(x_0):.1f} + {f(x_0, 1):.1f} * (x - {x_0})')\n", - - "axs.set_xlabel(\"Consumo en kWh\")\n", - - "axs.set_ylabel(f\"f(x)\")\n", - - "axs.set_ylim([-2,40])\n" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "### Optimizando con la aproximación\n", - - "Para una función convexa, $f(x)$, los siguientes problemas son equivalentes:\n", - - " $$\n", - - "\\begin{align*}\n", - - "\\min & f(x) &= \\ \\ \\min \\ \\ &z \\\\ \n", - - "&x\\in \\mathbb{R}. & & z \\geq f(x), \\\\\n", - - "& & & x \\in \\mathbb{R}.\n", - - "\\end{align*}\n", - - "$$\n", - - "Asi mismo, $f(x)\\geq g(x,x_0)$ para cualquier valor de $x_0$. \n", - - "\n", - - "Con estas dos observaciones, el problema original, $\\min_{x\\in\\mathbb{R}} (x-4)^2$, lo podemos aproximar con el siguiente modelo:\n", - - " $$\n", - - "\\begin{align*}\n", - - "\\min \\ \\ &z \\\\ \n", - - " & z \\geq 16 -8 * (x - 0) \\\\\n", - - " & z \\geq 1 -2 * (x - 3) \\\\\n", - - " & z \\geq 1 + 2 * (x - 5) \\\\\n", - - " & z \\geq 16 + 8 * (x - 8) \\\\\n", - - " & x \\in \\mathbb{R} \n", - - "\\end{align*}\n", - - "$$\n" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "### Funciones de costo aproximadas\n", - - "Volviendo al problema de cryptOR, una posible aproximación se muestra a continuación. " - - ] - - }, - - { - - "cell_type": "code", - - "execution_count": null, - - "metadata": {}, - - "outputs": [], - - "source": [ - - "import matplotlib.pyplot as plt\n", - - "import numpy as np\n", - - "\n", - - "def f1(x, orden=0):\n", - - " if orden == 0:\n", - - " # Función de costo de la generadora carbón\n", - - " return 0.0012 * (x ** 2) \n", - - " else:\n", - - " # Derivada evaluada en x\n", - - " return 0.0012 * 2 * x\n", - - "\n", - - "def f2(x, orden=0):\n", - - " if orden == 0:\n", - - " # Función de costo de la generadora solar\n", - - " return 0.0028 * x ** 2 - 0.5*x + 35\n", - - " else:\n", - - " # Derivada evaluada en x\n", - - " return 2 * 0.0028 * x - 0.5\n", - - "def f3(x, orden=0):\n", - - " if orden == 0:\n", - - " # Función de costo de la generadora eólica\n", - - " return 0.5 * x*np.log(x/150) + 30\n", - - " else:\n", - - " # Derivada evaluada en x\n", - - " return 0.5 * np.log(x/150) + 0.5\n", - - "\n", - - "# Funciones de costo\n", - - "f = [f1,f2,f3]\n", - - "# Puntos de evaluación de la función\n", - - "kwh = np.arange(1,250)\n", - - "\n", - - "fig, axs = plt.subplots(1,3, sharey=False, sharex=True, figsize=(15,5))\n", - - "for i, ax in enumerate(axs):\n", - - " axs[i].plot(kwh, f[i](kwh), )\n", - - " for x_0 in [20, 50, 100, 200]:\n", - - " axs[i].plot(kwh, f[i](x_0) + f[i](x_0,1) * (kwh - x_0), linestyle='dashed', color='red')\n", - - " print(f'Función {i+1} evaluada en {x_0}: {f[i](x_0):.3f} + {f[i](x_0, 1):.3f} * (x - {x_0})')\n", - - " ax.set_xlabel(\"Consumo en kWh\")\n", - - " ax.set_ylabel(f\"f {i+1} (x)\")\n", - - " ax.set_ylim([-1,100])\n" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "
\n", - - "Formule un modelo general de optimización lineal que le permita a CryptOR satisfacer la demanda de energía al mínimo costo y satisfaciendo las condiciones de los contratos. Para esto usted debe seguir los siguientes pasos: " - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "## Formulación\n", - - "\n", - - "**1.** Escriba lo(s) conjunto(s), parámetro(s) y variable(s) de decisión que utilizará en el modelo. \n", - - "\n", - - "### Conjuntos\n", - - "- $P$: Generadoras\n", - - "- $T$: Periodos de planeación\n", - - "\n", - - "### Parámetros\n", - - "- $d_t$: demanda de energía en kWh para el mes $t\\in T$\n", - - "- $b_i$: Consumo máximo mensual de la generadora $i\\in G$\n", - - "- $m_i$: Duración de cada contrato de la generadora $i\\in G$\n", - - "- $a_{ik}$: intercepto de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", - - "- $p_{ik}$: pendiente de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", - - "\n", - - "### Variables de decisión\n", - - "- $x_{it}$: cantidad de kWh contratados a la generadora $i\\in G$ para el mes $t\\in T$\n", - - "- $y_{it}$: variable binaria que indica si un nuevo contrato se firma con la generadora $i\\in G$ en el mes $t\\in T$\n", - - "- $v_{it}$: variable binaria que indica si un contrato con la generadora $i\\in G$ esta vigente en el mes $t\\in T$\n", - - "- $z_{it}$: costo total por consumo de energía de la generadora $i\\in G$ en el mes $t\\in T$" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "### Restricciones\n", - - "**2.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que se debe respetar la demanda exacta en cada mes. \n" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "$$\n", - - "\\begin{align*}\n", - - "\\sum_{i \\in G}x_{it} = d_t \\ \\ \\forall t \\in T.\n", - - "\\end{align*}\n", - - "$$" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "**3.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que la cantidad de kWh contratados no superan el consumo máximo mensual en los meses en donde hay un contrato vigente.\n", - - "$$\n", - - "\\begin{align*}\n", - - "x_{it} \\leq b_i v_{it} \\forall i \\in G, t \\in T.\n", - - "\\end{align*}\n", - - "$$" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "**4.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que si un contrato se firma, debe estar vigente por la duración estipulada, y que solo se puede haber un contrato vigente si se firmó previamente o en el mismo mes.\n", - - "$$\n", - - "\\begin{align*}\n", - - "\\sum_{t' \\in \\{\\max\\{t-m_i+1, 1\\}, \\ldots, t\\}}y_{it'} \\geq v_{it} \\ \\ \\forall i \\in G, t \\in T. \\\\ \n", - - "|\\{t, \\ldots, \\min\\{t+m_i-1,12\\}\\}|y_{it} \\leq \\sum_{t' \\in \\{t, \\ldots, \\min\\{t+m_i-1,12\\}\\}}v_{it} \\ \\ \\forall i \\in G, t \\in T. \\\\ \n", - - "\\end{align*}\n", - - "$$" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "**4.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que los contratos con cada generadora no se deben traslapar.\n", - - "$$\n", - - "\\begin{align*}\n", - - "\\sum_{t' \\in \\{t, \\ldots, t+m_i-1\\}}y_{it'} \\leq 1 \\ \\ \\forall i \\in G, t \\in T.\n", - - "\\end{align*}\n", - - "$$" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "**4.** Escriba la(s) restricción(es) lineal(es) que modelan las funciones de costo con expresiones lineales. Note que si no hay un contrato vigente en un mes particular, el costo es cero.\n", - - "$$\n", - - "\\begin{align*}\n", - - "z_{it} \\geq a_{ik} + p_{ik} x_{it} - M(1-v_{it}) \\ \\ \\forall i \\in G, t \\in T, k \\in \\{1,2,3,4\\}\n", - - "\\end{align*}\n", - - "$$" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "**4.** Escriba la(s) restricción(es) que describe(n) matemáticamente el tipo de variable(s) que está utilizando dentro del modelo. \n", - - "\n", - - "$$\n", - - "\\begin{align*}\n", - - "x_{it} & \\ge 0 \\ \\ &&\\forall i\\in G,t\\in T.\\\\\n", - - "y_{it} & \\in\\{0,1\\} \\ \\ &&\\forall i\\in G,t\\in T.\\\\\n", - - "v_{it} & \\in \\{0,1\\} \\ \\ &&\\forall i\\in G,t\\in T.\\\\\n", - - "z_{it} & \\ge 0 \\ \\ &&\\forall i\\in G,t\\in D.\\\\\n", - - "\\end{align*}\n", - - "$$" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "### Función Objetivo\n", - - "**5.** Escriba la función objetivo.\n", - - "\n", - - "$$\n", - - "\\text{minimizar } \\sum_{i\\in P}\\sum_{t\\in T}z_{it}\n", - - "$$" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "## Formulación matemática completa" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "## Formulación\n", - - "\n", - - "**1.** Escriba lo(s) conjunto(s), parámetro(s) y variable(s) de decisión que utilizará en el modelo. \n", - - "\n", - - "### Conjuntos\n", - - "- $P$: Generadoras\n", - - "- $T$: Periodos de planeación\n", - - "\n", - - "### Parámetros\n", - - "- $d_t$: demanda de energía en kWh para el mes $t\\in T$\n", - - "- $b_i$: Consumo máximo mensual de la generadora $i\\in G$\n", - - "- $m_i$: Duración de cada contrato de la generadora $i\\in G$\n", - - "- $a_{ik}$: intercepto de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", - - "- $p_{ik}$: pendiente de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", - - "\n", - - "### Variables de decisión\n", - - "- $x_{it}$: cantidad de kWh contratados a la generadora $i\\in G$ para el mes $t\\in T$\n", - - "- $y_{it}$: variable binaria que indica si un nuevo contrato se firma con la generadora $i\\in G$ en el mes $t\\in T$\n", - - "- $v_{it}$: variable binaria que indica si un contrato con la generadora $i\\in G$ está vigente en el mes $t\\in T$\n", - - "- $z_{it}$: costo total por consumo de energía de la generadora $i\\in G$ en el mes $t\\in T$\n", - - "\n", - - "**Modelo:**\n", - - "\n", - - "$$\n", - - "\\begin{align*}\n", - - "\n", - - "&\\text{minimizar } & \\sum_{i\\in P}\\sum_{t\\in T}z_{it} &&(1)\\\\\n", - - "&\\text{sujeto a}&&& \\\\\n", - - "&&\\sum_{i \\in G}x_{it} = d_t \\ \\ \\ \\ & \\forall t \\in T; &(2) \\\\\n", - - "&&x_{it} \\leq b_i v_{it} \\ \\ \\ \\ & \\forall i \\in G, t \\in T;&(3)\\\\\n", - - "&&\\sum_{t' \\in \\{\\max\\{t-m_i+1, 1\\}, \\ldots, t\\}}y_{it'} \\geq v_{it} \\ \\ \\ \\ & \\forall i \\in G, t \\in T; &(4)\\\\ \n", - - "&&|\\{t, \\ldots, \\min\\{t+m_i-1,12\\}\\}|y_{it} \\leq \\sum_{t' \\in \\{t, \\ldots, \\min\\{t+m_i-1,12\\}\\}}v_{it} \\ \\ \\ \\ & \\forall i \\in G, t \\in T;&(5)\\\\\n", - - "&&\\sum_{t' \\in \\{t, \\ldots, t+m_i-1\\}}y_{it'} \\leq 1 \\ \\ \\ \\ & \\forall i \\in G, t \\in T;&(6) \\\\ \n", - - "&&z_{it} \\geq a_{ik} + p_{ik} x_{it} - M(1-v_{it}) \\ \\ \\ \\ & \\forall i \\in G, t \\in T, k \\in \\{1,2,3,4\\};&(7) \\\\\n", - - "&&x_{it} \\ge 0 \\ \\ \\ \\ &\\forall i\\in G,t\\in T; &(8)\\\\\n", - - "&&y_{it} \\in\\{0,1\\} \\ \\ \\ \\ &\\forall i\\in G,t\\in T;\\\\\n", - - "&&v_{it} \\in \\{0,1\\} \\ \\ \\ \\ &\\forall i\\in G,t\\in T;\\\\\n", - - "&&z_{it} \\ge 0 \\ \\ \\ \\ &\\forall i\\in G,t\\in D.\n", - - "\\end{align*}\n", - - "$$" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "## Implementación\n", - - "**6.** Resuelva el modelo planteado utilizando la librería de PulP en Python. ¿Cuál es la solución\n", - - "óptima del problema? " - - ] - - }, - - { - - "cell_type": "code", - - "execution_count": null, - - "metadata": { - - "scrolled": true - - }, - - "outputs": [], - - "source": [ - - "#Importar librerías\n", - - "import pulp as lp\n", - - "import numpy as np\n", - - "from itertools import product\n", - - "\n", - - "#-----------------\n", - - "# Conjuntos\n", - - "#-----------------\n", - - "# Generadoras\n", - - "G=[\"Generadora 1\",\"Generadora 2\",\"Generadora 3\",]\n", - - "\n", - - "# Periodos de planeación\n", - - "T = list(range(1,12+1)) # range excluye el final del intervalo.\n", - - "\n", - - "# Conjunto de tuplas (i,t) donde i es una generadora\n", - - "# en G y t es un periodo de tiempo en T. \n", - - "G_x_T = list(product(G,T))\n", - - "\n", - - "#-----------------\n", - - "# Parámetros\n", - - "#-----------------\n", - - "d={# Periodo: demanda en kWh\n", - - " 1: 100, 2: 150, 3: 150, 4: 200, 5: 100, 6: 100,\n", - - " 7: 400, 8: 100, 9: 100, 10: 100, 11: 100, 12: 100} \n", - - "b={# Generadora: consumo maximo en kWh\n", - - " \"Generadora 1\":250,\n", - - " \"Generadora 2\":250,\n", - - " \"Generadora 3\":250}\n", - - "\n", - - "m={# Generadora: duración de por contrato en meses\n", - - " \"Generadora 1\":2,\n", - - " \"Generadora 2\":4,\n", - - " \"Generadora 3\":3}\n", - - "\n", - - "# Funciones de aproximación\n", - - "# Función 1 evaluada en 20: 0.480 + 0.048 * (x - 20)\n", - - "# Función 1 evaluada en 50: 3.000 + 0.120 * (x - 50)\n", - - "# Función 1 evaluada en 100: 12.000 + 0.240 * (x - 100)\n", - - "# Función 1 evaluada en 200: 48.000 + 0.480 * (x - 200)\n", - - "# Función 2 evaluada en 20: 26.120 + -0.388 * (x - 20)\n", - - "# Función 2 evaluada en 50: 17.000 + -0.220 * (x - 50)\n", - - "# Función 2 evaluada en 100: 13.000 + 0.060 * (x - 100)\n", - - "# Función 2 evaluada en 200: 47.000 + 0.620 * (x - 200)\n", - - "# Función 3 evaluada en 20: 9.851 + -0.507 * (x - 20)\n", - - "# Función 3 evaluada en 50: 2.535 + -0.049 * (x - 50)\n", - - "# Función 3 evaluada en 100: 9.727 + 0.297 * (x - 100)\n", - - "# Función 3 evaluada en 200: 58.768 + 0.644 * (x - 200)\n", - - "f={#Generadora: lista de tuplas (a,p), donde \"a\" es el \n", - - " # intercepto y \"p\" la pendiente de una función\n", - - " # aproximando el costo de la generadora\n", - - " \"Generadora 1\":[(0.48 - 0.048*20, 0.048),\n", - - " (3.0 - 0.12*50, 0.12),\n", - - " (12 - 0.24*100, 0.24),\n", - - " (48 - 0.48*200, 0.48)],\n", - - " \"Generadora 2\":[(26.12 + 0.388*20, -0.388),\n", - - " (17 + 0.22*50, -0.22),\n", - - " (13 - 0.06*100, 0.06),\n", - - " (47 - 0.62*200, 0.62)],\n", - - " \"Generadora 3\":[(9.851 + 0.507*20, -0.507),\n", - - " (2.535 + 0.049*50, -0.049),\n", - - " (9.727 - 0.297*100 , 0.297),\n", - - " (58.768 - 0.644*200, 0.644)]}\n", - - "\n", - - "#-------------------------------------\n", - - "# Creación del objeto problema en PuLP\n", - - "#-------------------------------------\n", - - "#Crea el problema para cargarlo con la instancia \n", - - "problema=lp.LpProblem(\"CryptOT\",lp.LpMinimize)\n", - - "\n", - - "#-----------------------------\n", - - "# Variables de Decisión\n", - - "#-----------------------------\n", - - "# Consumo mensual (en kWh) de la generadora i en G en el periodo\n", - - "# de tiempo t en T\n", - - "limite_superior_x = np.max([b[i] for i in G])\n", - - "x=lp.LpVariable.dicts('x', G_x_T, lowBound=0, upBound=limite_superior_x,\n", - - " cat=lp.const.LpContinuous)\n", - - "\n", - - "# Variable binaria que indica si un nuevo contrato es firmado con la\n", - - "# generadora i en G en el periodo de tiempo t en T\n", - - "y=lp.LpVariable.dicts('y', G_x_T, cat=lp.const.LpBinary)\n", - - "\n", - - "# Variable binaria que indica si hay un contrato vigente con la\n", - - "# generadora i en G en el periodo de tiempo t en T\n", - - "v=lp.LpVariable.dicts('v', G_x_T, cat=lp.const.LpBinary)\n", - - "\n", - - "\n", - - "# Variable auxiliar para calcular el costo por consumo asociado\n", - - "# a la generadora i en G en el periodo de tiempo t en T\n", - - "z=lp.LpVariable.dicts('z', G_x_T, lowBound=0, cat=lp.const.LpContinuous)\n", - - "\n", - - "#-----------------------------\n", - - "# Función objetivo\n", - - "#-----------------------------\n", - - "#Crea la expresión de minimización de costos\n", - - "problema+=lp.lpSum(z[i,t] for i in G for t in T), \"Costo anual\"\n", - - "\n", - - "#-----------------------------\n", - - "# Restricciones\n", - - "#-----------------------------\n", - - "\n", - - "\n", - - "# Satisfacción de la demanda\n", - - "# sum(i in G)x_it = d_t forall t in T\n", - - "for t in T:\n", - - " problema+= lp.lpSum(x[i,t] for i in G) == d[t], f\"Satisfacción de la demanda en el mes {t}\" \n", - - "\n", - - "# Relación entre consumo y contratos vigentes\n", - - "# x_it <= b_i * v_it forall i in G, t in T\n", - - "for (i,t) in G_x_T:\n", - - " problema+= x[i,t] <= b[i]*v[i,t], f\"Consumo de la generadora {i} en el mes {t}\" \n", - - "\n", - - "# Duracion de los contratos\n", - - "for (i,t) in G_x_T:\n", - - " # Periodos en los que podría ser firmado un contrato para que este vigente en t.\n", - - " T_f = [tt for tt in range(t - m[i] + 1, t + 1) if tt>=1] \n", - - " problema+= sum(y[i,tt] for tt in T_f) >= v[i,t], f\"Vigencia en el mes {t} de contratos de la Generadora {i} parte 1\"\n", - - " # Periodos vigentes si se firma un contrato en t\n", - - " T_v = [tt for tt in range(t, t + m[i]) if tt<=12] \n", - - " problema+= len(T_v) * y[i,t] <= sum(v[i,tt] for tt in T_v), f\"Vigencia en el mes {t} de contratos de la Generadora {i} parte 2\"\n", - - "\n", - - "# Máximo un contrato vigente por generadora en cada mes\n", - - "# sum(tt in [t, ..., t+m_i-1])y_i,tt <= 1 forall i in G, t in T\n", - - "for (i,t) in G_x_T:\n", - - " # Periodos vigentes si se firma un contrato en t\n", - - " T_v = [tt for tt in range(t, t + m[i]) if tt<=12] \n", - - " problema+= lp.lpSum(y[i,tt] for tt in T_v) <= 1, f\"Limite de nuevos contratos de la Generadora {i} firmados en el mes {t}\" \n", - - "\n", - - "# Función aproximada a trozos\n", - - "# z_it >= a_ik * p_ik * x_it - M(1-v_it)forall i in G, t in T, k = 1,...,numero_de_funciones\n", - - "M = 100\n", - - "for (i,t) in G_x_T:\n", - - " for k, (a,p) in enumerate(f[i]):\n", - - " problema+= z[i,t] >= a+ p*x[i,t] - M * (1-v[i,t]), f\"Aproximación {k} del costo por consumo de la generadora {i} en el mes {t}\" \n", - - "\n", - - "#-----------------------------\n", - - "# Imprimir formato LP\n", - - "#-----------------------------\n", - - "#Escribe el problema en un archivo con formato LP \n", - - "problema.writeLP(\"CryptOR.lp\")\n", - - "\n", - - "#-----------------------------\n", - - "# Invocar el optimizador\n", - - "#-----------------------------\n", - - "#Optimizar el modelo con CBC (default de PuLP)\n", - - "problema.solve()\n", - - "\n", - - "#-----------------------------\n", - - "# Imprimir resultados\n", - - "#-----------------------------\n", - - "#Imprimir estado final del optimizador\n", - - "print(\"Estado (optimizador):\", lp.LpStatus[problema.status],end='\\n')\n", - - "\n", - - "#Valor óptimo del plan de transporte \n", - - "print(\"\\n Costos totales = $\", round(lp.value(problema.objective),2))\n", - - "print()\n", - - "\n", - - "#Imprimir variables de decisión\n", - - "print(\"Variables de decisión\")\n", - - "tap_ = \"\"\n", - - "print(f'{\"Mes\":10s} {tap_.join(f\"{t:>8d}\" for t in T)}')\n", - - " \n", - - "for i in G:\n", - - " print(f'{i:10s} {tap_.join(f\"{x[i,t].value():>8.2f}\" for t in T)}')\n", - - " print(f'{\"Nuevo\":10s} {tap_.join(f\"{y[i,t].value():>8.0f}\" for t in T)}')\n", - - " print(f'{\"Vigente\":10s} {tap_.join(f\"{v[i,t].value():>8.0f}\" for t in T)}')" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "## Créditos\n", - - "Instancia: Daniel Duque
\n", - - "Fecha: 21/12/2021" - - ] - - } - -], - -"metadata": { - - "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.5" - - } - -}, - -"nbformat": 4, - -"nbformat_minor": 4 - -} +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# CryptOR" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Tags: Funciones a trozos" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Enunciado\n", + "CryptOR is una compañía que se dedica a minar criptomonedas. El mayor problema de planeación para CryptOR es la compra de energía. Dado el alto consumo de energía, CryptOR debe negociar contratos para los próximos 12 meses con las diferentes empresas de generación eléctrica. El costo por kilovatio-hora (kWh) varía según la cantidad de energía contratada y la empresa generadora. El costo total en función del consumo está representado por funciones no lineales suministradas por cada generadora. Así mismo, cada empresa generadora establece la duración de cada contrato que se firme con la misma y el consumo máximo mensual que pueden suministrar. Los contratos de cada generadora se pueden renovar múltiples veces durante los 12 meses de planeación, pero estos no se deben traslapar. Finalmente, se conoce un pronóstico de la demanda de energía en kWh que se debe satisfacer sin holgura. Las Tablas 1 y 2 resumen toda la información disponible. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Tabla 1. Términos de los contratos para cada generadora.\n", + "\n", + "| |**Función de costo ($k)** | **Duración del contrato**| **Consumo máximo mensual**|\n", + "|:-------------------:|:----------------------------------------:|:------------------------:|:-------------------------:|\n", + "|**Generadora Carbón**|$f_1(x) = 0.0012 x^2$ | 2 meses | 250 kWh |\n", + "|**Generadora Solar** |$f_2(x) = \\begin{cases}0.0028 x^2 - 0.5x + 35 \\ \\ x>0 \\\\ 0 \\ \\ x=0 \\end{cases}$ | 4 meses | 250 kWh |\n", + "|**Generadora Eólica**|$f_3(x) = \\begin{cases}0.5 x log(\\frac{x}{150}) + 30 \\ \\ x>0 \\\\ 0 \\ \\ x=0 \\end{cases}$ | 3 meses | 250 kWh |\n", + "\n", + "### Tabla 2. Demanda mensual en kWh.\n", + "|Mes| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12|\n", + "|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|\n", + "|demanda| 100| 150| 300| 300| 300| 500| 400| 400| 200| 200| 200| 200|" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "def f1(x):\n", + " # Función de costo de la generadora carbón\n", + " return 0.0012 * (x ** 2)\n", + "def f2(x):\n", + " # Función de costo de la generadora solar\n", + " return 0.0028 * x ** 2 - 0.5*x + 35\n", + "def f3(x):\n", + " # Función de costo de la generadora eólica\n", + " return 0.5 * x*np.log(x/150) + 30\n", + "\n", + "# Puntos de evaluación de la función\n", + "kwh = np.arange(1,250)\n", + "\n", + "fig, axs = plt.subplots(1,3, sharey=False, sharex=True, figsize=(15,5))\n", + "axs[0].plot(kwh, f1(kwh))\n", + "axs[1].plot(kwh, f2(kwh))\n", + "axs[2].plot(kwh, f3(kwh))\n", + "for ax_ix, ax in enumerate(axs):\n", + " ax.set_xlabel(\"Consumo en kWh\")\n", + " ax.set_ylabel(f\"f {ax_ix+1} (x)\")\n", + " ax.set_ylim([0,100])\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Linealización a trozos\n", + "\n", + "Optimizar utilizando las funciones $f_1(x)$, $f_2(x)$ y $f_3(x)$ es computacionalmente más difícil debido a que son funciones no lineales. Sin embrago, dado que son funciones [convexas](https://es.wikipedia.org/wiki/Funci%C3%B3n_convexa) es posible aproximarlas con múltiples funciones lineales. Dada una función convexa $f(x)$, la función $g(x;x_0) = f(x_0) + f'(x_0) * (x-x0)$ es una aproximación de [primer orden](https://es.wikipedia.org/wiki/Serie_de_Taylor), la cual es exacta en $x_0$ y se degrada a medida que $x$ se aleja de $x_0$. Con esta idea en mente, cualquier función convexa se puede aproximar generando múltiples funciones de forma $g(x;x_0)$ para diferentes valores de $x_0$. La siguiente celda muestra la función $f(x) = (x - 4)^2$ (en azul) y su aproximación (en rojo) utilizando 4 rectas correspondientes a $g(x;x_0)$ para $x_0=0,3,5,8$." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Función evaluada en 0: 16.0 + -8.0 * (x - 0)\n", + "Función evaluada en 3: 1.0 + -2.0 * (x - 3)\n", + "Función evaluada en 5: 1.0 + 2.0 * (x - 5)\n", + "Función evaluada en 8: 16.0 + 8.0 * (x - 8)\n" + ] + }, + { + "data": { + "text/plain": [ + "(-2.0, 40.0)" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "def f(x, orden=0):\n", + " if orden == 0:\n", + " # Función (x-4) ^ 2\n", + " return (x-4) ** 2 \n", + " else:\n", + " # Derivada evaluada en x\n", + " return 2 *(x - 4)\n", + "\n", + "# Puntos de evaluacion de la función\n", + "dominio = np.arange(-2,10,0.01)\n", + "\n", + "fig, axs = plt.subplots(1,1, sharey=False, sharex=True, figsize=(15,5))\n", + "axs.plot(dominio, f(dominio))\n", + "for x_0 in [0, 3, 5, 8]:\n", + " axs.plot(dominio, f(x_0) + f(x_0,1) * (dominio - x_0), linestyle='dashed', color='red')\n", + " print(f'Función evaluada en {x_0}: {f(x_0):.1f} + {f(x_0, 1):.1f} * (x - {x_0})')\n", + "axs.set_xlabel(\"Consumo en kWh\")\n", + "axs.set_ylabel(f\"f(x)\")\n", + "axs.set_ylim([-2,40])\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Optimizando con la aproximación\n", + "Para una función convexa, $f(x)$, los siguientes problemas son equivalentes:\n", + " $$\n", + "\\begin{align*}\n", + "\\min & f(x) &= \\ \\ \\min \\ \\ &z \\\\ \n", + "&x\\in \\mathbb{R}. & & z \\geq f(x), \\\\\n", + "& & & x \\in \\mathbb{R}.\n", + "\\end{align*}\n", + "$$\n", + "Asi mismo, $f(x)\\geq g(x,x_0)$ para cualquier valor de $x_0$. \n", + "\n", + "Con estas dos observaciones, el problema original, $\\min_{x\\in\\mathbb{R}} (x-4)^2$, lo podemos aproximar con el siguiente modelo:\n", + " $$\n", + "\\begin{align*}\n", + "\\min \\ \\ &z \\\\ \n", + " & z \\geq 16 -8 * (x - 0) \\\\\n", + " & z \\geq 1 -2 * (x - 3) \\\\\n", + " & z \\geq 1 + 2 * (x - 5) \\\\\n", + " & z \\geq 16 + 8 * (x - 8) \\\\\n", + " & x \\in \\mathbb{R} \n", + "\\end{align*}\n", + "$$\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Funciones de costo aproximadas\n", + "Volviendo al problema de cryptOR, una posible aproximación se muestra a continuación. " + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Función 1 evaluada en 20: 0.480 + 0.048 * (x - 20)\n", + "Función 1 evaluada en 50: 3.000 + 0.120 * (x - 50)\n", + "Función 1 evaluada en 100: 12.000 + 0.240 * (x - 100)\n", + "Función 1 evaluada en 200: 48.000 + 0.480 * (x - 200)\n", + "Función 2 evaluada en 20: 26.120 + -0.388 * (x - 20)\n", + "Función 2 evaluada en 50: 17.000 + -0.220 * (x - 50)\n", + "Función 2 evaluada en 100: 13.000 + 0.060 * (x - 100)\n", + "Función 2 evaluada en 200: 47.000 + 0.620 * (x - 200)\n", + "Función 3 evaluada en 20: 9.851 + -0.507 * (x - 20)\n", + "Función 3 evaluada en 50: 2.535 + -0.049 * (x - 50)\n", + "Función 3 evaluada en 100: 9.727 + 0.297 * (x - 100)\n", + "Función 3 evaluada en 200: 58.768 + 0.644 * (x - 200)\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "def f1(x, orden=0):\n", + " if orden == 0:\n", + " # Función de costo de la generadora carbón\n", + " return 0.0012 * (x ** 2) \n", + " else:\n", + " # Derivada evaluada en x\n", + " return 0.0012 * 2 * x\n", + "\n", + "def f2(x, orden=0):\n", + " if orden == 0:\n", + " # Función de costo de la generadora solar\n", + " return 0.0028 * x ** 2 - 0.5*x + 35\n", + " else:\n", + " # Derivada evaluada en x\n", + " return 2 * 0.0028 * x - 0.5\n", + "def f3(x, orden=0):\n", + " if orden == 0:\n", + " # Función de costo de la generadora eólica\n", + " return 0.5 * x*np.log(x/150) + 30\n", + " else:\n", + " # Derivada evaluada en x\n", + " return 0.5 * np.log(x/150) + 0.5\n", + "\n", + "# Funciones de costo\n", + "f = [f1,f2,f3]\n", + "# Puntos de evaluación de la función\n", + "kwh = np.arange(1,250)\n", + "\n", + "fig, axs = plt.subplots(1,3, sharey=False, sharex=True, figsize=(15,5))\n", + "for i, ax in enumerate(axs):\n", + " axs[i].plot(kwh, f[i](kwh), )\n", + " for x_0 in [20, 50, 100, 200]:\n", + " axs[i].plot(kwh, f[i](x_0) + f[i](x_0,1) * (kwh - x_0), linestyle='dashed', color='red')\n", + " print(f'Función {i+1} evaluada en {x_0}: {f[i](x_0):.3f} + {f[i](x_0, 1):.3f} * (x - {x_0})')\n", + " ax.set_xlabel(\"Consumo en kWh\")\n", + " ax.set_ylabel(f\"f {i+1} (x)\")\n", + " ax.set_ylim([-1,100])\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "Formule un modelo general de optimización lineal que le permita a CryptOR satisfacer la demanda de energía al mínimo costo y satisfaciendo las condiciones de los contratos. Para esto usted debe seguir los siguientes pasos: " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Formulación\n", + "\n", + "**1.** Escriba lo(s) conjunto(s), parámetro(s) y variable(s) de decisión que utilizará en el modelo. \n", + "\n", + "### Conjuntos\n", + "- $P$: Generadoras\n", + "- $T$: Periodos de planeación\n", + "\n", + "### Parámetros\n", + "- $d_t$: demanda de energía en kWh para el mes $t\\in T$\n", + "- $b_i$: Consumo máximo mensual de la generadora $i\\in G$\n", + "- $m_i$: Duración de cada contrato de la generadora $i\\in G$\n", + "- $a_{ik}$: intercepto de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", + "- $p_{ik}$: pendiente de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", + "\n", + "### Variables de decisión\n", + "- $x_{it}$: cantidad de kWh contratados a la generadora $i\\in G$ para el mes $t\\in T$\n", + "- $y_{it}$: variable binaria que indica si un nuevo contrato se firma con la generadora $i\\in G$ en el mes $t\\in T$\n", + "- $v_{it}$: variable binaria que indica si un contrato con la generadora $i\\in G$ esta vigente en el mes $t\\in T$\n", + "- $z_{it}$: costo total por consumo de energía de la generadora $i\\in G$ en el mes $t\\in T$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Restricciones\n", + "**2.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que se debe respetar la demanda exacta en cada mes. \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "\\sum_{i \\in G}x_{it} = d_t \\ \\ \\forall t \\in T.\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que la cantidad de kWh contratados no superan el consumo máximo mensual en los meses en donde hay un contrato vigente.\n", + "$$\n", + "\\begin{align*}\n", + "x_{it} \\leq b_i v_{it} \\forall i \\in G, t \\in T.\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**4.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que si un contrato se firma, debe estar vigente por la duración estipulada, y que solo se puede haber un contrato vigente si se firmó previamente o en el mismo mes.\n", + "$$\n", + "\\begin{align*}\n", + "\\sum_{t' \\in \\{\\max\\{t-m_i+1, 1\\}, \\ldots, t\\}}y_{it'} \\geq v_{it} \\ \\ \\forall i \\in G, t \\in T. \\\\ \n", + "|\\{t, \\ldots, \\min\\{t+m_i-1,12\\}\\}|y_{it} \\leq \\sum_{t' \\in \\{t, \\ldots, \\min\\{t+m_i-1,12\\}\\}}v_{it} \\ \\ \\forall i \\in G, t \\in T. \\\\ \n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**4.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que los contratos con cada generadora no se deben traslapar.\n", + "$$\n", + "\\begin{align*}\n", + "\\sum_{t' \\in \\{t, \\ldots, t+m_i-1\\}}y_{it'} \\leq 1 \\ \\ \\forall i \\in G, t \\in T.\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**4.** Escriba la(s) restricción(es) lineal(es) que modelan las funciones de costo con expresiones lineales. Note que si no hay un contrato vigente en un mes particular, el costo es cero.\n", + "$$\n", + "\\begin{align*}\n", + "z_{it} \\geq a_{ik} + p_{ik} x_{it} - M(1-v_{it}) \\ \\ \\forall i \\in G, t \\in T, k \\in \\{1,2,3,4\\}\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**4.** Escriba la(s) restricción(es) que describe(n) matemáticamente el tipo de variable(s) que está utilizando dentro del modelo. \n", + "\n", + "$$\n", + "\\begin{align*}\n", + "x_{it} & \\ge 0 \\ \\ &&\\forall i\\in G,t\\in T.\\\\\n", + "y_{it} & \\in\\{0,1\\} \\ \\ &&\\forall i\\in G,t\\in T.\\\\\n", + "v_{it} & \\in \\{0,1\\} \\ \\ &&\\forall i\\in G,t\\in T.\\\\\n", + "z_{it} & \\ge 0 \\ \\ &&\\forall i\\in G,t\\in D.\\\\\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Función Objetivo\n", + "**5.** Escriba la función objetivo.\n", + "\n", + "$$\n", + "\\text{minimizar } \\sum_{i\\in P}\\sum_{t\\in T}z_{it}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Formulación matemática completa" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Formulación\n", + "\n", + "**1.** Escriba lo(s) conjunto(s), parámetro(s) y variable(s) de decisión que utilizará en el modelo. \n", + "\n", + "### Conjuntos\n", + "- $P$: Generadoras\n", + "- $T$: Periodos de planeación\n", + "\n", + "### Parámetros\n", + "- $d_t$: demanda de energía en kWh para el mes $t\\in T$\n", + "- $b_i$: Consumo máximo mensual de la generadora $i\\in G$\n", + "- $m_i$: Duración de cada contrato de la generadora $i\\in G$\n", + "- $a_{ik}$: intercepto de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", + "- $p_{ik}$: pendiente de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", + "\n", + "### Variables de decisión\n", + "- $x_{it}$: cantidad de kWh contratados a la generadora $i\\in G$ para el mes $t\\in T$\n", + "- $y_{it}$: variable binaria que indica si un nuevo contrato se firma con la generadora $i\\in G$ en el mes $t\\in T$\n", + "- $v_{it}$: variable binaria que indica si un contrato con la generadora $i\\in G$ está vigente en el mes $t\\in T$\n", + "- $z_{it}$: costo total por consumo de energía de la generadora $i\\in G$ en el mes $t\\in T$\n", + "\n", + "**Modelo:**\n", + "\n", + "$$\n", + "\\begin{align*}\n", + "\n", + "&\\text{minimizar } & \\sum_{i\\in P}\\sum_{t\\in T}z_{it} &&(1)\\\\\n", + "&\\text{sujeto a}&&& \\\\\n", + "&&\\sum_{i \\in G}x_{it} = d_t \\ \\ \\ \\ & \\forall t \\in T; &(2) \\\\\n", + "&&x_{it} \\leq b_i v_{it} \\ \\ \\ \\ & \\forall i \\in G, t \\in T;&(3)\\\\\n", + "&&\\sum_{t' \\in \\{\\max\\{t-m_i+1, 1\\}, \\ldots, t\\}}y_{it'} \\geq v_{it} \\ \\ \\ \\ & \\forall i \\in G, t \\in T; &(4)\\\\ \n", + "&&|\\{t, \\ldots, \\min\\{t+m_i-1,12\\}\\}|y_{it} \\leq \\sum_{t' \\in \\{t, \\ldots, \\min\\{t+m_i-1,12\\}\\}}v_{it} \\ \\ \\ \\ & \\forall i \\in G, t \\in T;&(5)\\\\\n", + "&&\\sum_{t' \\in \\{t, \\ldots, t+m_i-1\\}}y_{it'} \\leq 1 \\ \\ \\ \\ & \\forall i \\in G, t \\in T;&(6) \\\\ \n", + "&&z_{it} \\geq a_{ik} + p_{ik} x_{it} - M(1-v_{it}) \\ \\ \\ \\ & \\forall i \\in G, t \\in T, k \\in \\{1,2,3,4\\};&(7) \\\\\n", + "&&x_{it} \\ge 0 \\ \\ \\ \\ &\\forall i\\in G,t\\in T; &(8)\\\\\n", + "&&y_{it} \\in\\{0,1\\} \\ \\ \\ \\ &\\forall i\\in G,t\\in T;\\\\\n", + "&&v_{it} \\in \\{0,1\\} \\ \\ \\ \\ &\\forall i\\in G,t\\in T;\\\\\n", + "&&z_{it} \\ge 0 \\ \\ \\ \\ &\\forall i\\in G,t\\in D.\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Implementación\n", + "**6.** Resuelva el modelo planteado utilizando la librería de PulP en Python. ¿Cuál es la solución\n", + "óptima del problema? " + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "#TODO: Implementación del modelo" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Créditos\n", + "Instancia: Daniel Duque
\n", + "Fecha: 21/12/2021" + ] + } + ], + "metadata": { + "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.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/optimizacion/Soluciones/CryptOR.ipynb b/optimizacion/Soluciones/CryptOR.ipynb index 9fe4b85..6eb2c56 100644 --- a/optimizacion/Soluciones/CryptOR.ipynb +++ b/optimizacion/Soluciones/CryptOR.ipynb @@ -1,1195 +1,697 @@ -{ - -"cells": [ - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "# CryptOR" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "Tags: Funciones a trozos" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "## Enunciado\n", - - "CryptOR is una compañía que se dedica a minar criptomonedas. El mayor problema de planeación para CryptOR es la compra de energía. Dado el alto consumo de energía, CryptOR debe negociar contratos para los próximos 12 meses con las diferentes empresas de generación eléctrica. El costo por kilovatio-hora (kWh) varía según la cantidad de energía contratada y la empresa generadora. El costo total en función del consumo está representado por funciones no lineales suministradas por cada generadora. Así mismo, cada empresa generadora establece la duración de cada contrato que se firme con la misma y el consumo máximo mensual que pueden suministrar. Los contratos de cada generadora se pueden renovar múltiples veces durante los 12 meses de planeación, pero estos no se deben traslapar. Finalmente, se conoce un pronóstico de la demanda de energía en kWh que se debe satisfacer sin holgura. Las Tablas 1 y 2 resumen toda la información disponible. " - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "### Tabla 1. Términos de los contratos para cada generadora.\n", - - "\n", - - "| |**Función de costo** | **Duración del contrato**| **Consumo máximo mensual**|\n", - - "|:-------------------:|:----------------------------------------:|:------------------------:|:-------------------------:|\n", - - "|**Generadora Carbón**|$f_1(x) = 0.0012 x^2$ | 2 meses | 250 kWh |\n", - - "|**Generadora Solar** |$f_2(x) = \\begin{cases}0.0028 x^2 - 0.5x + 35 \\ \\ x>0 \\\\ 0 \\ \\ x=0 \\end{cases}$ | 4 meses | 250 kWh |\n", - - "|**Generadora Eólica**|$f_3(x) = \\begin{cases}0.5 x log(\\frac{x}{150}) + 30 \\ \\ x>0 \\\\ 0 \\ \\ x=0 \\end{cases}$ | 3 meses | 250 kWh |\n", - - "\n", - - "### Tabla 2. Demanda mensual en kWh.\n", - - "|Mes| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12|\n", - - "|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|\n", - - "|demanda| 100| 150| 300| 300| 300| 500| 400| 400| 200| 200| 200| 200|" - - ] - - }, - - { - - "cell_type": "code", - - "execution_count": null, - - "metadata": {}, - - "outputs": [], - - "source": [ - - "import matplotlib.pyplot as plt\n", - - "import numpy as np\n", - - "\n", - - "def f1(x):\n", - - " # Función de costo de la generadora carbón\n", - - " return 0.0012 * (x ** 2)\n", - - "def f2(x):\n", - - " # Función de costo de la generadora solar\n", - - " return 0.0028 * x ** 2 - 0.5*x + 35\n", - - "def f3(x):\n", - - " # Función de costo de la generadora eólica\n", - - " return 0.5 * x*np.log(x/150) + 30\n", - - "\n", - - "# Puntos de evaluación de la función\n", - - "kwh = np.arange(1,250)\n", - - "\n", - - "fig, axs = plt.subplots(1,3, sharey=False, sharex=True, figsize=(15,5))\n", - - "axs[0].plot(kwh, f1(kwh))\n", - - "axs[1].plot(kwh, f2(kwh))\n", - - "axs[2].plot(kwh, f3(kwh))\n", - - "for ax_ix, ax in enumerate(axs):\n", - - " ax.set_xlabel(\"Consumo en kWh\")\n", - - " ax.set_ylabel(f\"f {ax_ix+1} (x)\")\n", - - " ax.set_ylim([0,100])\n", - - "\n" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "## Linealización a trozos\n", - - "\n", - - "Optimizar utilizando las funciones $f_1(x)$, $f_2(x)$ y $f_3(x)$ es computacionalmente más difícil debido a que son funciones no lineales. Sin embrago, dado que son funciones [convexas](https://es.wikipedia.org/wiki/Funci%C3%B3n_convexa) es posible aproximarlas con múltiples funciones lineales. Dada una función convexa $f(x)$, la función $g(x;x_0) = f(x_0) + f'(x_0) * (x-x0)$ es una aproximación de [primer orden](https://es.wikipedia.org/wiki/Serie_de_Taylor), la cual es exacta en $x_0$ y se degrada a medida que $x$ se aleja de $x_0$. Con esta idea en mente, cualquier función convexa se puede aproximar generando múltiples funciones de forma $g(x;x_0)$ para diferentes valores de $x_0$. La siguiente celda muestra la función $f(x) = (x - 4)^2$ (en azul) y su aproximación (en rojo) utilizando 4 rectas correspondientes a $g(x;x_0)$ para $x_0=0,3,5,8$." - - ] - - }, - - { - - "cell_type": "code", - - "execution_count": null, - - "metadata": {}, - - "outputs": [], - - "source": [ - - "import matplotlib.pyplot as plt\n", - - "import numpy as np\n", - - "\n", - - "def f(x, orden=0):\n", - - " if orden == 0:\n", - - " # Función (x-4) ^ 2\n", - - " return (x-4) ** 2 \n", - - " else:\n", - - " # Derivada evaluada en x\n", - - " return 2 *(x - 4)\n", - - "\n", - - "# Puntos de evaluacion de la función\n", - - "dominio = np.arange(-2,10,0.01)\n", - - "\n", - - "fig, axs = plt.subplots(1,1, sharey=False, sharex=True, figsize=(15,5))\n", - - "axs.plot(dominio, f(dominio))\n", - - "for x_0 in [0, 3, 5, 8]:\n", - - " axs.plot(dominio, f(x_0) + f(x_0,1) * (dominio - x_0), linestyle='dashed', color='red')\n", - - " print(f'Función evaluada en {x_0}: {f(x_0):.1f} + {f(x_0, 1):.1f} * (x - {x_0})')\n", - - "axs.set_xlabel(\"Consumo en kWh\")\n", - - "axs.set_ylabel(f\"f(x)\")\n", - - "axs.set_ylim([-2,40])\n" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "### Optimizando con la aproximación\n", - - "Para una función convexa, $f(x)$, los siguientes problemas son equivalentes:\n", - - " $$\n", - - "\\begin{align*}\n", - - "\\min & f(x) &= \\ \\ \\min \\ \\ &z \\\\ \n", - - "&x\\in \\mathbb{R}. & & z \\geq f(x), \\\\\n", - - "& & & x \\in \\mathbb{R}.\n", - - "\\end{align*}\n", - - "$$\n", - - "Asi mismo, $f(x)\\geq g(x,x_0)$ para cualquier valor de $x_0$. \n", - - "\n", - - "Con estas dos observaciones, el problema original, $\\min_{x\\in\\mathbb{R}} (x-4)^2$, lo podemos aproximar con el siguiente modelo:\n", - - " $$\n", - - "\\begin{align*}\n", - - "\\min \\ \\ &z \\\\ \n", - - " & z \\geq 16 -8 * (x - 0) \\\\\n", - - " & z \\geq 1 -2 * (x - 3) \\\\\n", - - " & z \\geq 1 + 2 * (x - 5) \\\\\n", - - " & z \\geq 16 + 8 * (x - 8) \\\\\n", - - " & x \\in \\mathbb{R} \n", - - "\\end{align*}\n", - - "$$\n" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "### Funciones de costo aproximadas\n", - - "Volviendo al problema de cryptOR, una posible aproximación se muestra a continuación. " - - ] - - }, - - { - - "cell_type": "code", - - "execution_count": null, - - "metadata": {}, - - "outputs": [], - - "source": [ - - "import matplotlib.pyplot as plt\n", - - "import numpy as np\n", - - "\n", - - "def f1(x, orden=0):\n", - - " if orden == 0:\n", - - " # Función de costo de la generadora carbón\n", - - " return 0.0012 * (x ** 2) \n", - - " else:\n", - - " # Derivada evaluada en x\n", - - " return 0.0012 * 2 * x\n", - - "\n", - - "def f2(x, orden=0):\n", - - " if orden == 0:\n", - - " # Función de costo de la generadora solar\n", - - " return 0.0028 * x ** 2 - 0.5*x + 35\n", - - " else:\n", - - " # Derivada evaluada en x\n", - - " return 2 * 0.0028 * x - 0.5\n", - - "def f3(x, orden=0):\n", - - " if orden == 0:\n", - - " # Función de costo de la generadora eólica\n", - - " return 0.5 * x*np.log(x/150) + 30\n", - - " else:\n", - - " # Derivada evaluada en x\n", - - " return 0.5 * np.log(x/150) + 0.5\n", - - "\n", - - "# Funciones de costo\n", - - "f = [f1,f2,f3]\n", - - "# Puntos de evaluación de la función\n", - - "kwh = np.arange(1,250)\n", - - "\n", - - "fig, axs = plt.subplots(1,3, sharey=False, sharex=True, figsize=(15,5))\n", - - "for i, ax in enumerate(axs):\n", - - " axs[i].plot(kwh, f[i](kwh), )\n", - - " for x_0 in [20, 50, 100, 200]:\n", - - " axs[i].plot(kwh, f[i](x_0) + f[i](x_0,1) * (kwh - x_0), linestyle='dashed', color='red')\n", - - " print(f'Función {i+1} evaluada en {x_0}: {f[i](x_0):.3f} + {f[i](x_0, 1):.3f} * (x - {x_0})')\n", - - " ax.set_xlabel(\"Consumo en kWh\")\n", - - " ax.set_ylabel(f\"f {i+1} (x)\")\n", - - " ax.set_ylim([-1,100])\n" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "
\n", - - "Formule un modelo general de optimización lineal que le permita a CryptOR satisfacer la demanda de energía al mínimo costo y satisfaciendo las condiciones de los contratos. Para esto usted debe seguir los siguientes pasos: " - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "## Formulación\n", - - "\n", - - "**1.** Escriba lo(s) conjunto(s), parámetro(s) y variable(s) de decisión que utilizará en el modelo. \n", - - "\n", - - "### Conjuntos\n", - - "- $P$: Generadoras\n", - - "- $T$: Periodos de planeación\n", - - "\n", - - "### Parámetros\n", - - "- $d_t$: demanda de energía en kWh para el mes $t\\in T$\n", - - "- $b_i$: Consumo máximo mensual de la generadora $i\\in G$\n", - - "- $m_i$: Duración de cada contrato de la generadora $i\\in G$\n", - - "- $a_{ik}$: intercepto de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", - - "- $p_{ik}$: pendiente de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", - - "\n", - - "### Variables de decisión\n", - - "- $x_{it}$: cantidad de kWh contratados a la generadora $i\\in G$ para el mes $t\\in T$\n", - - "- $y_{it}$: variable binaria que indica si un nuevo contrato se firma con la generadora $i\\in G$ en el mes $t\\in T$\n", - - "- $v_{it}$: variable binaria que indica si un contrato con la generadora $i\\in G$ esta vigente en el mes $t\\in T$\n", - - "- $z_{it}$: costo total por consumo de energía de la generadora $i\\in G$ en el mes $t\\in T$" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "### Restricciones\n", - - "**2.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que se debe respetar la demanda exacta en cada mes. \n" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "$$\n", - - "\\begin{align*}\n", - - "\\sum_{i \\in G}x_{it} = d_t \\ \\ \\forall t \\in T.\n", - - "\\end{align*}\n", - - "$$" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "**3.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que la cantidad de kWh contratados no superan el consumo máximo mensual en los meses en donde hay un contrato vigente.\n", - - "$$\n", - - "\\begin{align*}\n", - - "x_{it} \\leq b_i v_{it} \\forall i \\in G, t \\in T.\n", - - "\\end{align*}\n", - - "$$" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "**4.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que si un contrato se firma, debe estar vigente por la duración estipulada, y que solo se puede haber un contrato vigente si se firmó previamente o en el mismo mes.\n", - - "$$\n", - - "\\begin{align*}\n", - - "\\sum_{t' \\in \\{\\max\\{t-m_i+1, 1\\}, \\ldots, t\\}}y_{it'} \\geq v_{it} \\ \\ \\forall i \\in G, t \\in T. \\\\ \n", - - "|\\{t, \\ldots, \\min\\{t+m_i-1,12\\}\\}|y_{it} \\leq \\sum_{t' \\in \\{t, \\ldots, \\min\\{t+m_i-1,12\\}\\}}v_{it} \\ \\ \\forall i \\in G, t \\in T. \\\\ \n", - - "\\end{align*}\n", - - "$$" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "**4.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que los contratos con cada generadora no se deben traslapar.\n", - - "$$\n", - - "\\begin{align*}\n", - - "\\sum_{t' \\in \\{t, \\ldots, t+m_i-1\\}}y_{it'} \\leq 1 \\ \\ \\forall i \\in G, t \\in T.\n", - - "\\end{align*}\n", - - "$$" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "**4.** Escriba la(s) restricción(es) lineal(es) que modelan las funciones de costo con expresiones lineales. Note que si no hay un contrato vigente en un mes particular, el costo es cero.\n", - - "$$\n", - - "\\begin{align*}\n", - - "z_{it} \\geq a_{ik} + p_{ik} x_{it} - M(1-v_{it}) \\ \\ \\forall i \\in G, t \\in T, k \\in \\{1,2,3,4\\}\n", - - "\\end{align*}\n", - - "$$" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "**4.** Escriba la(s) restricción(es) que describe(n) matemáticamente el tipo de variable(s) que está utilizando dentro del modelo. \n", - - "\n", - - "$$\n", - - "\\begin{align*}\n", - - "x_{it} & \\ge 0 \\ \\ &&\\forall i\\in G,t\\in T.\\\\\n", - - "y_{it} & \\in\\{0,1\\} \\ \\ &&\\forall i\\in G,t\\in T.\\\\\n", - - "v_{it} & \\in \\{0,1\\} \\ \\ &&\\forall i\\in G,t\\in T.\\\\\n", - - "z_{it} & \\ge 0 \\ \\ &&\\forall i\\in G,t\\in D.\\\\\n", - - "\\end{align*}\n", - - "$$" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "### Función Objetivo\n", - - "**5.** Escriba la función objetivo.\n", - - "\n", - - "$$\n", - - "\\text{minimizar } \\sum_{i\\in P}\\sum_{t\\in T}z_{it}\n", - - "$$" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "## Formulación matemática completa" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "## Formulación\n", - - "\n", - - "**1.** Escriba lo(s) conjunto(s), parámetro(s) y variable(s) de decisión que utilizará en el modelo. \n", - - "\n", - - "### Conjuntos\n", - - "- $P$: Generadoras\n", - - "- $T$: Periodos de planeación\n", - - "\n", - - "### Parámetros\n", - - "- $d_t$: demanda de energía en kWh para el mes $t\\in T$\n", - - "- $b_i$: Consumo máximo mensual de la generadora $i\\in G$\n", - - "- $m_i$: Duración de cada contrato de la generadora $i\\in G$\n", - - "- $a_{ik}$: intercepto de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", - - "- $p_{ik}$: pendiente de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", - - "\n", - - "### Variables de decisión\n", - - "- $x_{it}$: cantidad de kWh contratados a la generadora $i\\in G$ para el mes $t\\in T$\n", - - "- $y_{it}$: variable binaria que indica si un nuevo contrato se firma con la generadora $i\\in G$ en el mes $t\\in T$\n", - - "- $v_{it}$: variable binaria que indica si un contrato con la generadora $i\\in G$ está vigente en el mes $t\\in T$\n", - - "- $z_{it}$: costo total por consumo de energía de la generadora $i\\in G$ en el mes $t\\in T$\n", - - "\n", - - "**Modelo:**\n", - - "\n", - - "$$\n", - - "\\begin{align*}\n", - - "\n", - - "&\\text{minimizar } & \\sum_{i\\in P}\\sum_{t\\in T}z_{it} &&(1)\\\\\n", - - "&\\text{sujeto a}&&& \\\\\n", - - "&&\\sum_{i \\in G}x_{it} = d_t \\ \\ \\ \\ & \\forall t \\in T; &(2) \\\\\n", - - "&&x_{it} \\leq b_i v_{it} \\ \\ \\ \\ & \\forall i \\in G, t \\in T;&(3)\\\\\n", - - "&&\\sum_{t' \\in \\{\\max\\{t-m_i+1, 1\\}, \\ldots, t\\}}y_{it'} \\geq v_{it} \\ \\ \\ \\ & \\forall i \\in G, t \\in T; &(4)\\\\ \n", - - "&&|\\{t, \\ldots, \\min\\{t+m_i-1,12\\}\\}|y_{it} \\leq \\sum_{t' \\in \\{t, \\ldots, \\min\\{t+m_i-1,12\\}\\}}v_{it} \\ \\ \\ \\ & \\forall i \\in G, t \\in T;&(5)\\\\\n", - - "&&\\sum_{t' \\in \\{t, \\ldots, t+m_i-1\\}}y_{it'} \\leq 1 \\ \\ \\ \\ & \\forall i \\in G, t \\in T;&(6) \\\\ \n", - - "&&z_{it} \\geq a_{ik} + p_{ik} x_{it} - M(1-v_{it}) \\ \\ \\ \\ & \\forall i \\in G, t \\in T, k \\in \\{1,2,3,4\\};&(7) \\\\\n", - - "&&x_{it} \\ge 0 \\ \\ \\ \\ &\\forall i\\in G,t\\in T; &(8)\\\\\n", - - "&&y_{it} \\in\\{0,1\\} \\ \\ \\ \\ &\\forall i\\in G,t\\in T;\\\\\n", - - "&&v_{it} \\in \\{0,1\\} \\ \\ \\ \\ &\\forall i\\in G,t\\in T;\\\\\n", - - "&&z_{it} \\ge 0 \\ \\ \\ \\ &\\forall i\\in G,t\\in D.\n", - - "\\end{align*}\n", - - "$$" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "## Implementación\n", - - "**6.** Resuelva el modelo planteado utilizando la librería de PulP en Python. ¿Cuál es la solución\n", - - "óptima del problema? " - - ] - - }, - - { - - "cell_type": "code", - - "execution_count": null, - - "metadata": { - - "scrolled": true - - }, - - "outputs": [], - - "source": [ - - "#Importar librerías\n", - - "import pulp as lp\n", - - "import numpy as np\n", - - "from itertools import product\n", - - "\n", - - "#-----------------\n", - - "# Conjuntos\n", - - "#-----------------\n", - - "# Generadoras\n", - - "G=[\"Generadora 1\",\"Generadora 2\",\"Generadora 3\",]\n", - - "\n", - - "# Periodos de planeación\n", - - "T = list(range(1,12+1)) # range excluye el final del intervalo.\n", - - "\n", - - "# Conjunto de tuplas (i,t) donde i es una generadora\n", - - "# en G y t es un periodo de tiempo en T. \n", - - "G_x_T = list(product(G,T))\n", - - "\n", - - "#-----------------\n", - - "# Parámetros\n", - - "#-----------------\n", - - "d={# Periodo: demanda en kWh\n", - - " 1: 100, 2: 150, 3: 150, 4: 200, 5: 100, 6: 100,\n", - - " 7: 400, 8: 100, 9: 100, 10: 100, 11: 100, 12: 100} \n", - - "b={# Generadora: consumo maximo en kWh\n", - - " \"Generadora 1\":250,\n", - - " \"Generadora 2\":250,\n", - - " \"Generadora 3\":250}\n", - - "\n", - - "m={# Generadora: duración de por contrato en meses\n", - - " \"Generadora 1\":2,\n", - - " \"Generadora 2\":4,\n", - - " \"Generadora 3\":3}\n", - - "\n", - - "# Funciones de aproximación\n", - - "# Función 1 evaluada en 20: 0.480 + 0.048 * (x - 20)\n", - - "# Función 1 evaluada en 50: 3.000 + 0.120 * (x - 50)\n", - - "# Función 1 evaluada en 100: 12.000 + 0.240 * (x - 100)\n", - - "# Función 1 evaluada en 200: 48.000 + 0.480 * (x - 200)\n", - - "# Función 2 evaluada en 20: 26.120 + -0.388 * (x - 20)\n", - - "# Función 2 evaluada en 50: 17.000 + -0.220 * (x - 50)\n", - - "# Función 2 evaluada en 100: 13.000 + 0.060 * (x - 100)\n", - - "# Función 2 evaluada en 200: 47.000 + 0.620 * (x - 200)\n", - - "# Función 3 evaluada en 20: 9.851 + -0.507 * (x - 20)\n", - - "# Función 3 evaluada en 50: 2.535 + -0.049 * (x - 50)\n", - - "# Función 3 evaluada en 100: 9.727 + 0.297 * (x - 100)\n", - - "# Función 3 evaluada en 200: 58.768 + 0.644 * (x - 200)\n", - - "f={#Generadora: lista de tuplas (a,p), donde \"a\" es el \n", - - " # intercepto y \"p\" la pendiente de una función\n", - - " # aproximando el costo de la generadora\n", - - " \"Generadora 1\":[(0.48 - 0.048*20, 0.048),\n", - - " (3.0 - 0.12*50, 0.12),\n", - - " (12 - 0.24*100, 0.24),\n", - - " (48 - 0.48*200, 0.48)],\n", - - " \"Generadora 2\":[(26.12 + 0.388*20, -0.388),\n", - - " (17 + 0.22*50, -0.22),\n", - - " (13 - 0.06*100, 0.06),\n", - - " (47 - 0.62*200, 0.62)],\n", - - " \"Generadora 3\":[(9.851 + 0.507*20, -0.507),\n", - - " (2.535 + 0.049*50, -0.049),\n", - - " (9.727 - 0.297*100 , 0.297),\n", - - " (58.768 - 0.644*200, 0.644)]}\n", - - "\n", - - "#-------------------------------------\n", - - "# Creación del objeto problema en PuLP\n", - - "#-------------------------------------\n", - - "#Crea el problema para cargarlo con la instancia \n", - - "problema=lp.LpProblem(\"CryptOT\",lp.LpMinimize)\n", - - "\n", - - "#-----------------------------\n", - - "# Variables de Decisión\n", - - "#-----------------------------\n", - - "# Consumo mensual (en kWh) de la generadora i en G en el periodo\n", - - "# de tiempo t en T\n", - - "limite_superior_x = np.max([b[i] for i in G])\n", - - "x=lp.LpVariable.dicts('x', G_x_T, lowBound=0, upBound=limite_superior_x,\n", - - " cat=lp.const.LpContinuous)\n", - - "\n", - - "# Variable binaria que indica si un nuevo contrato es firmado con la\n", - - "# generadora i en G en el periodo de tiempo t en T\n", - - "y=lp.LpVariable.dicts('y', G_x_T, cat=lp.const.LpBinary)\n", - - "\n", - - "# Variable binaria que indica si hay un contrato vigente con la\n", - - "# generadora i en G en el periodo de tiempo t en T\n", - - "v=lp.LpVariable.dicts('v', G_x_T, cat=lp.const.LpBinary)\n", - - "\n", - - "\n", - - "# Variable auxiliar para calcular el costo por consumo asociado\n", - - "# a la generadora i en G en el periodo de tiempo t en T\n", - - "z=lp.LpVariable.dicts('z', G_x_T, lowBound=0, cat=lp.const.LpContinuous)\n", - - "\n", - - "#-----------------------------\n", - - "# Función objetivo\n", - - "#-----------------------------\n", - - "#Crea la expresión de minimización de costos\n", - - "problema+=lp.lpSum(z[i,t] for i in G for t in T), \"Costo anual\"\n", - - "\n", - - "#-----------------------------\n", - - "# Restricciones\n", - - "#-----------------------------\n", - - "\n", - - "\n", - - "# Satisfacción de la demanda\n", - - "# sum(i in G)x_it = d_t forall t in T\n", - - "for t in T:\n", - - " problema+= lp.lpSum(x[i,t] for i in G) == d[t], f\"Satisfacción de la demanda en el mes {t}\" \n", - - "\n", - - "# Relación entre consumo y contratos vigentes\n", - - "# x_it <= b_i * v_it forall i in G, t in T\n", - - "for (i,t) in G_x_T:\n", - - " problema+= x[i,t] <= b[i]*v[i,t], f\"Consumo de la generadora {i} en el mes {t}\" \n", - - "\n", - - "# Duracion de los contratos\n", - - "for (i,t) in G_x_T:\n", - - " # Periodos en los que podría ser firmado un contrato para que este vigente en t.\n", - - " T_f = [tt for tt in range(t - m[i] + 1, t + 1) if tt>=1] \n", - - " problema+= sum(y[i,tt] for tt in T_f) >= v[i,t], f\"Vigencia en el mes {t} de contratos de la Generadora {i} parte 1\"\n", - - " # Periodos vigentes si se firma un contrato en t\n", - - " T_v = [tt for tt in range(t, t + m[i]) if tt<=12] \n", - - " problema+= len(T_v) * y[i,t] <= sum(v[i,tt] for tt in T_v), f\"Vigencia en el mes {t} de contratos de la Generadora {i} parte 2\"\n", - - "\n", - - "# Máximo un contrato vigente por generadora en cada mes\n", - - "# sum(tt in [t, ..., t+m_i-1])y_i,tt <= 1 forall i in G, t in T\n", - - "for (i,t) in G_x_T:\n", - - " # Periodos vigentes si se firma un contrato en t\n", - - " T_v = [tt for tt in range(t, t + m[i]) if tt<=12] \n", - - " problema+= lp.lpSum(y[i,tt] for tt in T_v) <= 1, f\"Limite de nuevos contratos de la Generadora {i} firmados en el mes {t}\" \n", - - "\n", - - "# Función aproximada a trozos\n", - - "# z_it >= a_ik * p_ik * x_it - M(1-v_it)forall i in G, t in T, k = 1,...,numero_de_funciones\n", - - "M = 100\n", - - "for (i,t) in G_x_T:\n", - - " for k, (a,p) in enumerate(f[i]):\n", - - " problema+= z[i,t] >= a+ p*x[i,t] - M * (1-v[i,t]), f\"Aproximación {k} del costo por consumo de la generadora {i} en el mes {t}\" \n", - - "\n", - - "#-----------------------------\n", - - "# Imprimir formato LP\n", - - "#-----------------------------\n", - - "#Escribe el problema en un archivo con formato LP \n", - - "problema.writeLP(\"CryptOR.lp\")\n", - - "\n", - - "#-----------------------------\n", - - "# Invocar el optimizador\n", - - "#-----------------------------\n", - - "#Optimizar el modelo con CBC (default de PuLP)\n", - - "problema.solve()\n", - - "\n", - - "#-----------------------------\n", - - "# Imprimir resultados\n", - - "#-----------------------------\n", - - "#Imprimir estado final del optimizador\n", - - "print(\"Estado (optimizador):\", lp.LpStatus[problema.status],end='\\n')\n", - - "\n", - - "#Valor óptimo del plan de transporte \n", - - "print(\"\\n Costos totales = $\", round(lp.value(problema.objective),2))\n", - - "print()\n", - - "\n", - - "#Imprimir variables de decisión\n", - - "print(\"Variables de decisión\")\n", - - "tap_ = \"\"\n", - - "print(f'{\"Mes\":10s} {tap_.join(f\"{t:>8d}\" for t in T)}')\n", - - " \n", - - "for i in G:\n", - - " print(f'{i:10s} {tap_.join(f\"{x[i,t].value():>8.2f}\" for t in T)}')\n", - - " print(f'{\"Nuevo\":10s} {tap_.join(f\"{y[i,t].value():>8.0f}\" for t in T)}')\n", - - " print(f'{\"Vigente\":10s} {tap_.join(f\"{v[i,t].value():>8.0f}\" for t in T)}')" - - ] - - }, - - { - - "cell_type": "markdown", - - "metadata": {}, - - "source": [ - - "## Créditos\n", - - "Instancia: Daniel Duque
\n", - - "Fecha: 21/12/2021" - - ] - - } - -], - -"metadata": { - - "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.5" - - } - -}, - -"nbformat": 4, - -"nbformat_minor": 4 - -} +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# CryptOR" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Tags: Funciones a trozos" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Enunciado\n", + "CryptOR is una compañía que se dedica a minar criptomonedas. El mayor problema de planeación para CryptOR es la compra de energía. Dado el alto consumo de energía, CryptOR debe negociar contratos para los próximos 12 meses con las diferentes empresas de generación eléctrica. El costo por kilovatio-hora (kWh) varía según la cantidad de energía contratada y la empresa generadora. El costo total en función del consumo está representado por funciones no lineales suministradas por cada generadora. Así mismo, cada empresa generadora establece la duración de cada contrato que se firme con la misma y el consumo máximo mensual que pueden suministrar. Los contratos de cada generadora se pueden renovar múltiples veces durante los 12 meses de planeación, pero estos no se deben traslapar. Finalmente, se conoce un pronóstico de la demanda de energía en kWh que se debe satisfacer sin holgura. Las Tablas 1 y 2 resumen toda la información disponible. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Tabla 1. Términos de los contratos para cada generadora.\n", + "\n", + "| |**Función de costo ($k)** | **Duración del contrato**| **Consumo máximo mensual**|\n", + "|:-------------------:|:----------------------------------------:|:------------------------:|:-------------------------:|\n", + "|**Generadora Carbón**|$f_1(x) = 0.0012 x^2$ | 2 meses | 250 kWh |\n", + "|**Generadora Solar** |$f_2(x) = \\begin{cases}0.0028 x^2 - 0.5x + 35 \\ \\ x>0 \\\\ 0 \\ \\ x=0 \\end{cases}$ | 4 meses | 250 kWh |\n", + "|**Generadora Eólica**|$f_3(x) = \\begin{cases}0.5 x log(\\frac{x}{150}) + 30 \\ \\ x>0 \\\\ 0 \\ \\ x=0 \\end{cases}$ | 3 meses | 250 kWh |\n", + "\n", + "### Tabla 2. Demanda mensual en kWh.\n", + "|Mes| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12|\n", + "|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|\n", + "|demanda| 100| 150| 300| 300| 300| 500| 400| 400| 200| 200| 200| 200|" + ] + }, + { + "cell_type": "code", + "execution_count": 392, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "def f1(x):\n", + " # Función de costo de la generadora carbón\n", + " return 0.0012 * (x ** 2)\n", + "def f2(x):\n", + " # Función de costo de la generadora solar\n", + " return 0.0028 * x ** 2 - 0.5*x + 35\n", + "def f3(x):\n", + " # Función de costo de la generadora eólica\n", + " return 0.5 * x*np.log(x/150) + 30\n", + "\n", + "# Puntos de evaluación de la función\n", + "kwh = np.arange(1,250)\n", + "\n", + "fig, axs = plt.subplots(1,3, sharey=False, sharex=True, figsize=(15,5))\n", + "axs[0].plot(kwh, f1(kwh))\n", + "axs[1].plot(kwh, f2(kwh))\n", + "axs[2].plot(kwh, f3(kwh))\n", + "for ax_ix, ax in enumerate(axs):\n", + " ax.set_xlabel(\"Consumo en kWh\")\n", + " ax.set_ylabel(f\"f {ax_ix+1} (x)\")\n", + " ax.set_ylim([0,100])\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Linealización a trozos\n", + "\n", + "Optimizar utilizando las funciones $f_1(x)$, $f_2(x)$ y $f_3(x)$ es computacionalmente más difícil debido a que son funciones no lineales. Sin embrago, dado que son funciones [convexas](https://es.wikipedia.org/wiki/Funci%C3%B3n_convexa) es posible aproximarlas con múltiples funciones lineales. Dada una función convexa $f(x)$, la función $g(x;x_0) = f(x_0) + f'(x_0) * (x-x0)$ es una aproximación de [primer orden](https://es.wikipedia.org/wiki/Serie_de_Taylor), la cual es exacta en $x_0$ y se degrada a medida que $x$ se aleja de $x_0$. Con esta idea en mente, cualquier función convexa se puede aproximar generando múltiples funciones de forma $g(x;x_0)$ para diferentes valores de $x_0$. La siguiente celda muestra la función $f(x) = (x - 4)^2$ (en azul) y su aproximación (en rojo) utilizando 4 rectas correspondientes a $g(x;x_0)$ para $x_0=0,3,5,8$." + ] + }, + { + "cell_type": "code", + "execution_count": 393, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Función evaluada en 0: 16.0 + -8.0 * (x - 0)\n", + "Función evaluada en 3: 1.0 + -2.0 * (x - 3)\n", + "Función evaluada en 5: 1.0 + 2.0 * (x - 5)\n", + "Función evaluada en 8: 16.0 + 8.0 * (x - 8)\n" + ] + }, + { + "data": { + "text/plain": [ + "(-2.0, 40.0)" + ] + }, + "execution_count": 393, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "def f(x, orden=0):\n", + " if orden == 0:\n", + " # Función (x-4) ^ 2\n", + " return (x-4) ** 2 \n", + " else:\n", + " # Derivada evaluada en x\n", + " return 2 *(x - 4)\n", + "\n", + "# Puntos de evaluacion de la función\n", + "dominio = np.arange(-2,10,0.01)\n", + "\n", + "fig, axs = plt.subplots(1,1, sharey=False, sharex=True, figsize=(15,5))\n", + "axs.plot(dominio, f(dominio))\n", + "for x_0 in [0, 3, 5, 8]:\n", + " axs.plot(dominio, f(x_0) + f(x_0,1) * (dominio - x_0), linestyle='dashed', color='red')\n", + " print(f'Función evaluada en {x_0}: {f(x_0):.1f} + {f(x_0, 1):.1f} * (x - {x_0})')\n", + "axs.set_xlabel(\"Consumo en kWh\")\n", + "axs.set_ylabel(f\"f(x)\")\n", + "axs.set_ylim([-2,40])\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Optimizando con la aproximación\n", + "Para una función convexa, $f(x)$, los siguientes problemas son equivalentes:\n", + " $$\n", + "\\begin{align*}\n", + "\\min & f(x) &= \\ \\ \\min \\ \\ &z \\\\ \n", + "&x\\in \\mathbb{R}. & & z \\geq f(x), \\\\\n", + "& & & x \\in \\mathbb{R}.\n", + "\\end{align*}\n", + "$$\n", + "Asi mismo, $f(x)\\geq g(x,x_0)$ para cualquier valor de $x_0$. \n", + "\n", + "Con estas dos observaciones, el problema original, $\\min_{x\\in\\mathbb{R}} (x-4)^2$, lo podemos aproximar con el siguiente modelo:\n", + " $$\n", + "\\begin{align*}\n", + "\\min \\ \\ &z \\\\ \n", + " & z \\geq 16 -8 * (x - 0) \\\\\n", + " & z \\geq 1 -2 * (x - 3) \\\\\n", + " & z \\geq 1 + 2 * (x - 5) \\\\\n", + " & z \\geq 16 + 8 * (x - 8) \\\\\n", + " & x \\in \\mathbb{R} \n", + "\\end{align*}\n", + "$$\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Funciones de costo aproximadas\n", + "Volviendo al problema de cryptOR, una posible aproximación se muestra a continuación. " + ] + }, + { + "cell_type": "code", + "execution_count": 394, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Función 1 evaluada en 20: 0.480 + 0.048 * (x - 20)\n", + "Función 1 evaluada en 50: 3.000 + 0.120 * (x - 50)\n", + "Función 1 evaluada en 100: 12.000 + 0.240 * (x - 100)\n", + "Función 1 evaluada en 200: 48.000 + 0.480 * (x - 200)\n", + "Función 2 evaluada en 20: 26.120 + -0.388 * (x - 20)\n", + "Función 2 evaluada en 50: 17.000 + -0.220 * (x - 50)\n", + "Función 2 evaluada en 100: 13.000 + 0.060 * (x - 100)\n", + "Función 2 evaluada en 200: 47.000 + 0.620 * (x - 200)\n", + "Función 3 evaluada en 20: 9.851 + -0.507 * (x - 20)\n", + "Función 3 evaluada en 50: 2.535 + -0.049 * (x - 50)\n", + "Función 3 evaluada en 100: 9.727 + 0.297 * (x - 100)\n", + "Función 3 evaluada en 200: 58.768 + 0.644 * (x - 200)\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "def f1(x, orden=0):\n", + " if orden == 0:\n", + " # Función de costo de la generadora carbón\n", + " return 0.0012 * (x ** 2) \n", + " else:\n", + " # Derivada evaluada en x\n", + " return 0.0012 * 2 * x\n", + "\n", + "def f2(x, orden=0):\n", + " if orden == 0:\n", + " # Función de costo de la generadora solar\n", + " return 0.0028 * x ** 2 - 0.5*x + 35\n", + " else:\n", + " # Derivada evaluada en x\n", + " return 2 * 0.0028 * x - 0.5\n", + "def f3(x, orden=0):\n", + " if orden == 0:\n", + " # Función de costo de la generadora eólica\n", + " return 0.5 * x*np.log(x/150) + 30\n", + " else:\n", + " # Derivada evaluada en x\n", + " return 0.5 * np.log(x/150) + 0.5\n", + "\n", + "# Funciones de costo\n", + "f = [f1,f2,f3]\n", + "# Puntos de evaluación de la función\n", + "kwh = np.arange(1,250)\n", + "\n", + "fig, axs = plt.subplots(1,3, sharey=False, sharex=True, figsize=(15,5))\n", + "for i, ax in enumerate(axs):\n", + " axs[i].plot(kwh, f[i](kwh), )\n", + " for x_0 in [20, 50, 100, 200]:\n", + " axs[i].plot(kwh, f[i](x_0) + f[i](x_0,1) * (kwh - x_0), linestyle='dashed', color='red')\n", + " print(f'Función {i+1} evaluada en {x_0}: {f[i](x_0):.3f} + {f[i](x_0, 1):.3f} * (x - {x_0})')\n", + " ax.set_xlabel(\"Consumo en kWh\")\n", + " ax.set_ylabel(f\"f {i+1} (x)\")\n", + " ax.set_ylim([-1,100])\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "Formule un modelo general de optimización lineal que le permita a CryptOR satisfacer la demanda de energía al mínimo costo y satisfaciendo las condiciones de los contratos. Para esto usted debe seguir los siguientes pasos: " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Formulación\n", + "\n", + "**1.** Escriba lo(s) conjunto(s), parámetro(s) y variable(s) de decisión que utilizará en el modelo. \n", + "\n", + "### Conjuntos\n", + "- $P$: Generadoras\n", + "- $T$: Periodos de planeación\n", + "\n", + "### Parámetros\n", + "- $d_t$: demanda de energía en kWh para el mes $t\\in T$\n", + "- $b_i$: Consumo máximo mensual de la generadora $i\\in G$\n", + "- $m_i$: Duración de cada contrato de la generadora $i\\in G$\n", + "- $a_{ik}$: intercepto de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", + "- $p_{ik}$: pendiente de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", + "\n", + "### Variables de decisión\n", + "- $x_{it}$: cantidad de kWh contratados a la generadora $i\\in G$ para el mes $t\\in T$\n", + "- $y_{it}$: variable binaria que indica si un nuevo contrato se firma con la generadora $i\\in G$ en el mes $t\\in T$\n", + "- $v_{it}$: variable binaria que indica si un contrato con la generadora $i\\in G$ esta vigente en el mes $t\\in T$\n", + "- $z_{it}$: costo total por consumo de energía de la generadora $i\\in G$ en el mes $t\\in T$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Restricciones\n", + "**2.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que se debe respetar la demanda exacta en cada mes. \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "\\sum_{i \\in G}x_{it} = d_t \\ \\ \\forall t \\in T.\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**3.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que la cantidad de kWh contratados no superan el consumo máximo mensual en los meses en donde hay un contrato vigente.\n", + "$$\n", + "\\begin{align*}\n", + "x_{it} \\leq b_i v_{it} \\forall i \\in G, t \\in T.\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**4.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que si un contrato se firma, debe estar vigente por la duración estipulada, y que solo se puede haber un contrato vigente si se firmó previamente o en el mismo mes.\n", + "$$\n", + "\\begin{align*}\n", + "\\sum_{t' \\in \\{\\max\\{t-m_i+1, 1\\}, \\ldots, t\\}}y_{it'} \\geq v_{it} \\ \\ \\forall i \\in G, t \\in T. \\\\ \n", + "|\\{t, \\ldots, \\min\\{t+m_i-1,12\\}\\}|y_{it} \\leq \\sum_{t' \\in \\{t, \\ldots, \\min\\{t+m_i-1,12\\}\\}}v_{it} \\ \\ \\forall i \\in G, t \\in T. \\\\ \n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**4.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que los contratos con cada generadora no se deben traslapar.\n", + "$$\n", + "\\begin{align*}\n", + "\\sum_{t' \\in \\{t, \\ldots, t+m_i-1\\}}y_{it'} \\leq 1 \\ \\ \\forall i \\in G, t \\in T.\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**4.** Escriba la(s) restricción(es) lineal(es) que modelan las funciones de costo con expresiones lineales. Note que si no hay un contrato vigente en un mes particular, el costo es cero.\n", + "$$\n", + "\\begin{align*}\n", + "z_{it} \\geq a_{ik} + p_{ik} x_{it} - M(1-v_{it}) \\ \\ \\forall i \\in G, t \\in T, k \\in \\{1,2,3,4\\}\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**4.** Escriba la(s) restricción(es) que describe(n) matemáticamente el tipo de variable(s) que está utilizando dentro del modelo. \n", + "\n", + "$$\n", + "\\begin{align*}\n", + "x_{it} & \\ge 0 \\ \\ &&\\forall i\\in G,t\\in T.\\\\\n", + "y_{it} & \\in\\{0,1\\} \\ \\ &&\\forall i\\in G,t\\in T.\\\\\n", + "v_{it} & \\in \\{0,1\\} \\ \\ &&\\forall i\\in G,t\\in T.\\\\\n", + "z_{it} & \\ge 0 \\ \\ &&\\forall i\\in G,t\\in D.\\\\\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Función Objetivo\n", + "**5.** Escriba la función objetivo.\n", + "\n", + "$$\n", + "\\text{minimizar } \\sum_{i\\in P}\\sum_{t\\in T}z_{it}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Formulación matemática completa" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Formulación\n", + "\n", + "**1.** Escriba lo(s) conjunto(s), parámetro(s) y variable(s) de decisión que utilizará en el modelo. \n", + "\n", + "### Conjuntos\n", + "- $P$: Generadoras\n", + "- $T$: Periodos de planeación\n", + "\n", + "### Parámetros\n", + "- $d_t$: demanda de energía en kWh para el mes $t\\in T$\n", + "- $b_i$: Consumo máximo mensual de la generadora $i\\in G$\n", + "- $m_i$: Duración de cada contrato de la generadora $i\\in G$\n", + "- $a_{ik}$: intercepto de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", + "- $p_{ik}$: pendiente de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", + "\n", + "### Variables de decisión\n", + "- $x_{it}$: cantidad de kWh contratados a la generadora $i\\in G$ para el mes $t\\in T$\n", + "- $y_{it}$: variable binaria que indica si un nuevo contrato se firma con la generadora $i\\in G$ en el mes $t\\in T$\n", + "- $v_{it}$: variable binaria que indica si un contrato con la generadora $i\\in G$ está vigente en el mes $t\\in T$\n", + "- $z_{it}$: costo total por consumo de energía de la generadora $i\\in G$ en el mes $t\\in T$\n", + "\n", + "**Modelo:**\n", + "\n", + "$$\n", + "\\begin{align*}\n", + "\n", + "&\\text{minimizar } & \\sum_{i\\in P}\\sum_{t\\in T}z_{it} &&(1)\\\\\n", + "&\\text{sujeto a}&&& \\\\\n", + "&&\\sum_{i \\in G}x_{it} = d_t \\ \\ \\ \\ & \\forall t \\in T; &(2) \\\\\n", + "&&x_{it} \\leq b_i v_{it} \\ \\ \\ \\ & \\forall i \\in G, t \\in T;&(3)\\\\\n", + "&&\\sum_{t' \\in \\{\\max\\{t-m_i+1, 1\\}, \\ldots, t\\}}y_{it'} \\geq v_{it} \\ \\ \\ \\ & \\forall i \\in G, t \\in T; &(4)\\\\ \n", + "&&|\\{t, \\ldots, \\min\\{t+m_i-1,12\\}\\}|y_{it} \\leq \\sum_{t' \\in \\{t, \\ldots, \\min\\{t+m_i-1,12\\}\\}}v_{it} \\ \\ \\ \\ & \\forall i \\in G, t \\in T;&(5)\\\\\n", + "&&\\sum_{t' \\in \\{t, \\ldots, t+m_i-1\\}}y_{it'} \\leq 1 \\ \\ \\ \\ & \\forall i \\in G, t \\in T;&(6) \\\\ \n", + "&&z_{it} \\geq a_{ik} + p_{ik} x_{it} - M(1-v_{it}) \\ \\ \\ \\ & \\forall i \\in G, t \\in T, k \\in \\{1,2,3,4\\};&(7) \\\\\n", + "&&x_{it} \\ge 0 \\ \\ \\ \\ &\\forall i\\in G,t\\in T; &(8)\\\\\n", + "&&y_{it} \\in\\{0,1\\} \\ \\ \\ \\ &\\forall i\\in G,t\\in T;\\\\\n", + "&&v_{it} \\in \\{0,1\\} \\ \\ \\ \\ &\\forall i\\in G,t\\in T;\\\\\n", + "&&z_{it} \\ge 0 \\ \\ \\ \\ &\\forall i\\in G,t\\in D.\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Implementación\n", + "**6.** Resuelva el modelo planteado utilizando la librería de PulP en Python. ¿Cuál es la solución\n", + "óptima del problema? " + ] + }, + { + "cell_type": "code", + "execution_count": 395, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Estado (optimizador): Optimal\n", + "\n", + " Costos totales = $ 123.29\n", + "\n", + "Variables de decisión\n", + "Mes 1 2 3 4 5 6 7 8 9 10 11 12\n", + "Generadora 1 27.87 77.87 77.87 50.00 25.00 25.00 150.00 27.87 27.87 27.87 27.87 27.87\n", + "Nuevo 1 0 1 0 1 0 1 0 1 0 1 0\n", + "Vigente 1 1 1 1 1 1 1 1 1 1 1 1\n", + "Generadora 2 0.00 0.00 0.00 150.00 75.00 75.00 150.00 0.00 0.00 0.00 0.00 0.00\n", + "Nuevo 0 0 0 1 0 0 0 0 0 0 0 0\n", + "Vigente 0 0 0 1 1 1 1 0 0 0 0 0\n", + "Generadora 3 72.13 72.13 72.13 0.00 0.00 0.00 100.00 72.13 72.13 72.13 72.13 72.13\n", + "Nuevo 1 0 0 0 0 0 1 0 0 1 0 0\n", + "Vigente 1 1 1 0 0 0 1 1 1 1 1 1\n" + ] + } + ], + "source": [ + "#Importar librerías\n", + "import pulp as lp\n", + "import numpy as np\n", + "from itertools import product\n", + "\n", + "#-----------------\n", + "# Conjuntos\n", + "#-----------------\n", + "# Generadoras\n", + "G=[\"Generadora 1\",\"Generadora 2\",\"Generadora 3\",]\n", + "\n", + "# Periodos de planeación\n", + "T = list(range(1,12+1)) # range excluye el final del intervalo.\n", + "\n", + "# Conjunto de tuplas (i,t) donde i es una generadora\n", + "# en G y t es un periodo de tiempo en T. \n", + "G_x_T = list(product(G,T))\n", + "\n", + "#-----------------\n", + "# Parámetros\n", + "#-----------------\n", + "d={# Periodo: demanda en kWh\n", + " 1: 100, 2: 150, 3: 150, 4: 200, 5: 100, 6: 100,\n", + " 7: 400, 8: 100, 9: 100, 10: 100, 11: 100, 12: 100} \n", + "b={# Generadora: consumo maximo en kWh\n", + " \"Generadora 1\":250,\n", + " \"Generadora 2\":250,\n", + " \"Generadora 3\":250}\n", + "\n", + "m={# Generadora: duración de por contrato en meses\n", + " \"Generadora 1\":2,\n", + " \"Generadora 2\":4,\n", + " \"Generadora 3\":3}\n", + "\n", + "# Funciones de aproximación\n", + "# Función 1 evaluada en 20: 0.480 + 0.048 * (x - 20)\n", + "# Función 1 evaluada en 50: 3.000 + 0.120 * (x - 50)\n", + "# Función 1 evaluada en 100: 12.000 + 0.240 * (x - 100)\n", + "# Función 1 evaluada en 200: 48.000 + 0.480 * (x - 200)\n", + "# Función 2 evaluada en 20: 26.120 + -0.388 * (x - 20)\n", + "# Función 2 evaluada en 50: 17.000 + -0.220 * (x - 50)\n", + "# Función 2 evaluada en 100: 13.000 + 0.060 * (x - 100)\n", + "# Función 2 evaluada en 200: 47.000 + 0.620 * (x - 200)\n", + "# Función 3 evaluada en 20: 9.851 + -0.507 * (x - 20)\n", + "# Función 3 evaluada en 50: 2.535 + -0.049 * (x - 50)\n", + "# Función 3 evaluada en 100: 9.727 + 0.297 * (x - 100)\n", + "# Función 3 evaluada en 200: 58.768 + 0.644 * (x - 200)\n", + "f={#Generadora: lista de tuplas (a,p), donde \"a\" es el \n", + " # intercepto y \"p\" la pendiente de una función\n", + " # aproximando el costo de la generadora\n", + " \"Generadora 1\":[(0.48 - 0.048*20, 0.048),\n", + " (3.0 - 0.12*50, 0.12),\n", + " (12 - 0.24*100, 0.24),\n", + " (48 - 0.48*200, 0.48)],\n", + " \"Generadora 2\":[(26.12 + 0.388*20, -0.388),\n", + " (17 + 0.22*50, -0.22),\n", + " (13 - 0.06*100, 0.06),\n", + " (47 - 0.62*200, 0.62)],\n", + " \"Generadora 3\":[(9.851 + 0.507*20, -0.507),\n", + " (2.535 + 0.049*50, -0.049),\n", + " (9.727 - 0.297*100 , 0.297),\n", + " (58.768 - 0.644*200, 0.644)]}\n", + "\n", + "#-------------------------------------\n", + "# Creación del objeto problema en PuLP\n", + "#-------------------------------------\n", + "#Crea el problema para cargarlo con la instancia \n", + "problema=lp.LpProblem(\"CryptOT\",lp.LpMinimize)\n", + "\n", + "#-----------------------------\n", + "# Variables de Decisión\n", + "#-----------------------------\n", + "# Consumo mensual (en kWh) de la generadora i en G en el periodo\n", + "# de tiempo t en T\n", + "limite_superior_x = np.max([b[i] for i in G])\n", + "x=lp.LpVariable.dicts('x', G_x_T, lowBound=0, upBound=limite_superior_x,\n", + " cat=lp.const.LpContinuous)\n", + "\n", + "# Variable binaria que indica si un nuevo contrato es firmado con la\n", + "# generadora i en G en el periodo de tiempo t en T\n", + "y=lp.LpVariable.dicts('y', G_x_T, cat=lp.const.LpBinary)\n", + "\n", + "# Variable binaria que indica si hay un contrato vigente con la\n", + "# generadora i en G en el periodo de tiempo t en T\n", + "v=lp.LpVariable.dicts('v', G_x_T, cat=lp.const.LpBinary)\n", + "\n", + "\n", + "# Variable auxiliar para calcular el costo por consumo asociado\n", + "# a la generadora i en G en el periodo de tiempo t en T\n", + "z=lp.LpVariable.dicts('z', G_x_T, lowBound=0, cat=lp.const.LpContinuous)\n", + "\n", + "#-----------------------------\n", + "# Función objetivo\n", + "#-----------------------------\n", + "#Crea la expresión de minimización de costos\n", + "problema+=lp.lpSum(z[i,t] for i in G for t in T), \"Costo anual\"\n", + "\n", + "#-----------------------------\n", + "# Restricciones\n", + "#-----------------------------\n", + "\n", + "\n", + "# Satisfacción de la demanda\n", + "# sum(i in G)x_it = d_t forall t in T\n", + "for t in T:\n", + " problema+= lp.lpSum(x[i,t] for i in G) == d[t], f\"Satisfacción de la demanda en el mes {t}\" \n", + "\n", + "# Relación entre consumo y contratos vigentes\n", + "# x_it <= b_i * v_it forall i in G, t in T\n", + "for (i,t) in G_x_T:\n", + " problema+= x[i,t] <= b[i]*v[i,t], f\"Consumo de la generadora {i} en el mes {t}\" \n", + "\n", + "# Duracion de los contratos\n", + "for (i,t) in G_x_T:\n", + " # Periodos en los que podría ser firmado un contrato para que este vigente en t.\n", + " T_f = [tt for tt in range(t - m[i] + 1, t + 1) if tt>=1] \n", + " problema+= sum(y[i,tt] for tt in T_f) >= v[i,t], f\"Vigencia en el mes {t} de contratos de la Generadora {i} parte 1\"\n", + " # Periodos vigentes si se firma un contrato en t\n", + " T_v = [tt for tt in range(t, t + m[i]) if tt<=12] \n", + " problema+= len(T_v) * y[i,t] <= sum(v[i,tt] for tt in T_v), f\"Vigencia en el mes {t} de contratos de la Generadora {i} parte 2\"\n", + "\n", + "# Máximo un contrato vigente por generadora en cada mes\n", + "# sum(tt in [t, ..., t+m_i-1])y_i,tt <= 1 forall i in G, t in T\n", + "for (i,t) in G_x_T:\n", + " # Periodos vigentes si se firma un contrato en t\n", + " T_v = [tt for tt in range(t, t + m[i]) if tt<=12] \n", + " problema+= lp.lpSum(y[i,tt] for tt in T_v) <= 1, f\"Limite de nuevos contratos de la Generadora {i} firmados en el mes {t}\" \n", + "\n", + "# Función aproximada a trozos\n", + "# z_it >= a_ik * p_ik * x_it - M(1-v_it)forall i in G, t in T, k = 1,...,numero_de_funciones\n", + "M = 100\n", + "for (i,t) in G_x_T:\n", + " for k, (a,p) in enumerate(f[i]):\n", + " problema+= z[i,t] >= a+ p*x[i,t] - M * (1-v[i,t]), f\"Aproximación {k} del costo por consumo de la generadora {i} en el mes {t}\" \n", + "\n", + "#-----------------------------\n", + "# Imprimir formato LP\n", + "#-----------------------------\n", + "#Escribe el problema en un archivo con formato LP \n", + "problema.writeLP(\"CryptOR.lp\")\n", + "\n", + "#-----------------------------\n", + "# Invocar el optimizador\n", + "#-----------------------------\n", + "#Optimizar el modelo con CBC (default de PuLP)\n", + "problema.solve()\n", + "\n", + "#-----------------------------\n", + "# Imprimir resultados\n", + "#-----------------------------\n", + "#Imprimir estado final del optimizador\n", + "print(\"Estado (optimizador):\", lp.LpStatus[problema.status],end='\\n')\n", + "\n", + "#Valor óptimo del plan de transporte \n", + "print(\"\\n Costos totales = $\", round(lp.value(problema.objective),2))\n", + "print()\n", + "\n", + "#Imprimir variables de decisión\n", + "print(\"Variables de decisión\")\n", + "tap_ = \"\"\n", + "print(f'{\"Mes\":10s} {tap_.join(f\"{t:>8d}\" for t in T)}')\n", + " \n", + "for i in G:\n", + " print(f'{i:10s} {tap_.join(f\"{x[i,t].value():>8.2f}\" for t in T)}')\n", + " print(f'{\"Nuevo\":10s} {tap_.join(f\"{y[i,t].value():>8.0f}\" for t in T)}')\n", + " print(f'{\"Vigente\":10s} {tap_.join(f\"{v[i,t].value():>8.0f}\" for t in T)}')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Créditos\n", + "Instancia: Daniel Duque
\n", + "Fecha: 21/12/2021" + ] + } + ], + "metadata": { + "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.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} From a7aaed07f5f99128745900a3a3cddd38372500f5 Mon Sep 17 00:00:00 2001 From: Daniel Duque Date: Tue, 21 Dec 2021 21:33:49 -0500 Subject: [PATCH 5/9] Typos y limpieza del enunciado. --- optimizacion/Enunciados/CryptOR.ipynb | 132 +++----------------------- optimizacion/Soluciones/CryptOR.ipynb | 14 +-- 2 files changed, 19 insertions(+), 127 deletions(-) diff --git a/optimizacion/Enunciados/CryptOR.ipynb b/optimizacion/Enunciados/CryptOR.ipynb index 3a5ebe7..fba499b 100644 --- a/optimizacion/Enunciados/CryptOR.ipynb +++ b/optimizacion/Enunciados/CryptOR.ipynb @@ -42,7 +42,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -97,7 +97,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -116,7 +116,7 @@ "(-2.0, 40.0)" ] }, - "execution_count": 10, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" }, @@ -196,7 +196,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 19, "metadata": {}, "outputs": [ { @@ -287,24 +287,7 @@ "source": [ "## Formulación\n", "\n", - "**1.** Escriba lo(s) conjunto(s), parámetro(s) y variable(s) de decisión que utilizará en el modelo. \n", - "\n", - "### Conjuntos\n", - "- $P$: Generadoras\n", - "- $T$: Periodos de planeación\n", - "\n", - "### Parámetros\n", - "- $d_t$: demanda de energía en kWh para el mes $t\\in T$\n", - "- $b_i$: Consumo máximo mensual de la generadora $i\\in G$\n", - "- $m_i$: Duración de cada contrato de la generadora $i\\in G$\n", - "- $a_{ik}$: intercepto de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", - "- $p_{ik}$: pendiente de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", - "\n", - "### Variables de decisión\n", - "- $x_{it}$: cantidad de kWh contratados a la generadora $i\\in G$ para el mes $t\\in T$\n", - "- $y_{it}$: variable binaria que indica si un nuevo contrato se firma con la generadora $i\\in G$ en el mes $t\\in T$\n", - "- $v_{it}$: variable binaria que indica si un contrato con la generadora $i\\in G$ esta vigente en el mes $t\\in T$\n", - "- $z_{it}$: costo total por consumo de energía de la generadora $i\\in G$ en el mes $t\\in T$" + "**1.** Escriba lo(s) conjunto(s), parámetro(s) y variable(s) de decisión que utilizará en el modelo. " ] }, { @@ -319,76 +302,35 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "$$\n", - "\\begin{align*}\n", - "\\sum_{i \\in G}x_{it} = d_t \\ \\ \\forall t \\in T.\n", - "\\end{align*}\n", - "$$" + "**3.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que la cantidad de kWh contratados no superan el consumo máximo mensual en los meses en donde hay un contrato vigente." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**3.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que la cantidad de kWh contratados no superan el consumo máximo mensual en los meses en donde hay un contrato vigente.\n", - "$$\n", - "\\begin{align*}\n", - "x_{it} \\leq b_i v_{it} \\forall i \\in G, t \\in T.\n", - "\\end{align*}\n", - "$$" + "**4.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que si un contrato se firma, debe estar vigente por la duración estipulada, y que solo se puede haber un contrato vigente si se firmó previamente o en el mismo mes." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**4.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que si un contrato se firma, debe estar vigente por la duración estipulada, y que solo se puede haber un contrato vigente si se firmó previamente o en el mismo mes.\n", - "$$\n", - "\\begin{align*}\n", - "\\sum_{t' \\in \\{\\max\\{t-m_i+1, 1\\}, \\ldots, t\\}}y_{it'} \\geq v_{it} \\ \\ \\forall i \\in G, t \\in T. \\\\ \n", - "|\\{t, \\ldots, \\min\\{t+m_i-1,12\\}\\}|y_{it} \\leq \\sum_{t' \\in \\{t, \\ldots, \\min\\{t+m_i-1,12\\}\\}}v_{it} \\ \\ \\forall i \\in G, t \\in T. \\\\ \n", - "\\end{align*}\n", - "$$" + "**4.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que los contratos con cada generadora no se deben traslapar." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**4.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que los contratos con cada generadora no se deben traslapar.\n", - "$$\n", - "\\begin{align*}\n", - "\\sum_{t' \\in \\{t, \\ldots, t+m_i-1\\}}y_{it'} \\leq 1 \\ \\ \\forall i \\in G, t \\in T.\n", - "\\end{align*}\n", - "$$" + "**4.** Escriba la(s) restricción(es) lineal(es) que modelan las funciones de costo con expresiones lineales. Note que si no hay un contrato vigente en un mes particular, el costo es cero." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**4.** Escriba la(s) restricción(es) lineal(es) que modelan las funciones de costo con expresiones lineales. Note que si no hay un contrato vigente en un mes particular, el costo es cero.\n", - "$$\n", - "\\begin{align*}\n", - "z_{it} \\geq a_{ik} + p_{ik} x_{it} - M(1-v_{it}) \\ \\ \\forall i \\in G, t \\in T, k \\in \\{1,2,3,4\\}\n", - "\\end{align*}\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**4.** Escriba la(s) restricción(es) que describe(n) matemáticamente el tipo de variable(s) que está utilizando dentro del modelo. \n", - "\n", - "$$\n", - "\\begin{align*}\n", - "x_{it} & \\ge 0 \\ \\ &&\\forall i\\in G,t\\in T.\\\\\n", - "y_{it} & \\in\\{0,1\\} \\ \\ &&\\forall i\\in G,t\\in T.\\\\\n", - "v_{it} & \\in \\{0,1\\} \\ \\ &&\\forall i\\in G,t\\in T.\\\\\n", - "z_{it} & \\ge 0 \\ \\ &&\\forall i\\in G,t\\in D.\\\\\n", - "\\end{align*}\n", - "$$" + "**4.** Escriba la(s) restricción(es) que describe(n) matemáticamente el tipo de variable(s) que está utilizando dentro del modelo. " ] }, { @@ -396,11 +338,7 @@ "metadata": {}, "source": [ "### Función Objetivo\n", - "**5.** Escriba la función objetivo.\n", - "\n", - "$$\n", - "\\text{minimizar } \\sum_{i\\in P}\\sum_{t\\in T}z_{it}\n", - "$$" + "**5.** Escriba la función objetivo." ] }, { @@ -410,52 +348,6 @@ "## Formulación matemática completa" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Formulación\n", - "\n", - "**1.** Escriba lo(s) conjunto(s), parámetro(s) y variable(s) de decisión que utilizará en el modelo. \n", - "\n", - "### Conjuntos\n", - "- $P$: Generadoras\n", - "- $T$: Periodos de planeación\n", - "\n", - "### Parámetros\n", - "- $d_t$: demanda de energía en kWh para el mes $t\\in T$\n", - "- $b_i$: Consumo máximo mensual de la generadora $i\\in G$\n", - "- $m_i$: Duración de cada contrato de la generadora $i\\in G$\n", - "- $a_{ik}$: intercepto de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", - "- $p_{ik}$: pendiente de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", - "\n", - "### Variables de decisión\n", - "- $x_{it}$: cantidad de kWh contratados a la generadora $i\\in G$ para el mes $t\\in T$\n", - "- $y_{it}$: variable binaria que indica si un nuevo contrato se firma con la generadora $i\\in G$ en el mes $t\\in T$\n", - "- $v_{it}$: variable binaria que indica si un contrato con la generadora $i\\in G$ está vigente en el mes $t\\in T$\n", - "- $z_{it}$: costo total por consumo de energía de la generadora $i\\in G$ en el mes $t\\in T$\n", - "\n", - "**Modelo:**\n", - "\n", - "$$\n", - "\\begin{align*}\n", - "\n", - "&\\text{minimizar } & \\sum_{i\\in P}\\sum_{t\\in T}z_{it} &&(1)\\\\\n", - "&\\text{sujeto a}&&& \\\\\n", - "&&\\sum_{i \\in G}x_{it} = d_t \\ \\ \\ \\ & \\forall t \\in T; &(2) \\\\\n", - "&&x_{it} \\leq b_i v_{it} \\ \\ \\ \\ & \\forall i \\in G, t \\in T;&(3)\\\\\n", - "&&\\sum_{t' \\in \\{\\max\\{t-m_i+1, 1\\}, \\ldots, t\\}}y_{it'} \\geq v_{it} \\ \\ \\ \\ & \\forall i \\in G, t \\in T; &(4)\\\\ \n", - "&&|\\{t, \\ldots, \\min\\{t+m_i-1,12\\}\\}|y_{it} \\leq \\sum_{t' \\in \\{t, \\ldots, \\min\\{t+m_i-1,12\\}\\}}v_{it} \\ \\ \\ \\ & \\forall i \\in G, t \\in T;&(5)\\\\\n", - "&&\\sum_{t' \\in \\{t, \\ldots, t+m_i-1\\}}y_{it'} \\leq 1 \\ \\ \\ \\ & \\forall i \\in G, t \\in T;&(6) \\\\ \n", - "&&z_{it} \\geq a_{ik} + p_{ik} x_{it} - M(1-v_{it}) \\ \\ \\ \\ & \\forall i \\in G, t \\in T, k \\in \\{1,2,3,4\\};&(7) \\\\\n", - "&&x_{it} \\ge 0 \\ \\ \\ \\ &\\forall i\\in G,t\\in T; &(8)\\\\\n", - "&&y_{it} \\in\\{0,1\\} \\ \\ \\ \\ &\\forall i\\in G,t\\in T;\\\\\n", - "&&v_{it} \\in \\{0,1\\} \\ \\ \\ \\ &\\forall i\\in G,t\\in T;\\\\\n", - "&&z_{it} \\ge 0 \\ \\ \\ \\ &\\forall i\\in G,t\\in D.\n", - "\\end{align*}\n", - "$$" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -467,7 +359,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ diff --git a/optimizacion/Soluciones/CryptOR.ipynb b/optimizacion/Soluciones/CryptOR.ipynb index 6eb2c56..9fb63ca 100644 --- a/optimizacion/Soluciones/CryptOR.ipynb +++ b/optimizacion/Soluciones/CryptOR.ipynb @@ -42,7 +42,7 @@ }, { "cell_type": "code", - "execution_count": 392, + "execution_count": 396, "metadata": {}, "outputs": [ { @@ -97,7 +97,7 @@ }, { "cell_type": "code", - "execution_count": 393, + "execution_count": 397, "metadata": {}, "outputs": [ { @@ -116,7 +116,7 @@ "(-2.0, 40.0)" ] }, - "execution_count": 393, + "execution_count": 397, "metadata": {}, "output_type": "execute_result" }, @@ -196,7 +196,7 @@ }, { "cell_type": "code", - "execution_count": 394, + "execution_count": 398, "metadata": {}, "outputs": [ { @@ -426,8 +426,8 @@ "- $d_t$: demanda de energía en kWh para el mes $t\\in T$\n", "- $b_i$: Consumo máximo mensual de la generadora $i\\in G$\n", "- $m_i$: Duración de cada contrato de la generadora $i\\in G$\n", - "- $a_{ik}$: intercepto de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", - "- $p_{ik}$: pendiente de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", + "- $a_{ik}$: intercepto de la ecuación $k\\in\\{1,2,3,4\\}$ para la generadora $i\\in G$\n", + "- $p_{ik}$: pendiente de la ecuación $k\\in\\{1,2,3,4\\}$ para la generadora $i\\in G$\n", "\n", "### Variables de decisión\n", "- $x_{it}$: cantidad de kWh contratados a la generadora $i\\in G$ para el mes $t\\in T$\n", @@ -467,7 +467,7 @@ }, { "cell_type": "code", - "execution_count": 395, + "execution_count": 399, "metadata": { "scrolled": true }, From 565fbe88161914847159d31a7c26acbb0c304407 Mon Sep 17 00:00:00 2001 From: Daniel Duque Date: Wed, 22 Dec 2021 00:41:05 -0500 Subject: [PATCH 6/9] Cambio en el layout del notebook. --- optimizacion/Soluciones/CryptOR.ipynb | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/optimizacion/Soluciones/CryptOR.ipynb b/optimizacion/Soluciones/CryptOR.ipynb index 9fb63ca..c65c71a 100644 --- a/optimizacion/Soluciones/CryptOR.ipynb +++ b/optimizacion/Soluciones/CryptOR.ipynb @@ -42,7 +42,7 @@ }, { "cell_type": "code", - "execution_count": 396, + "execution_count": 405, "metadata": {}, "outputs": [ { @@ -97,7 +97,7 @@ }, { "cell_type": "code", - "execution_count": 397, + "execution_count": 406, "metadata": {}, "outputs": [ { @@ -116,7 +116,7 @@ "(-2.0, 40.0)" ] }, - "execution_count": 397, + "execution_count": 406, "metadata": {}, "output_type": "execute_result" }, @@ -196,7 +196,7 @@ }, { "cell_type": "code", - "execution_count": 398, + "execution_count": 407, "metadata": {}, "outputs": [ { @@ -278,7 +278,7 @@ "metadata": {}, "source": [ "
\n", - "Formule un modelo general de optimización lineal que le permita a CryptOR satisfacer la demanda de energía al mínimo costo y satisfaciendo las condiciones de los contratos. Para esto usted debe seguir los siguientes pasos: " + "Formule un modelo general de optimización lineal que le permita a CryptOR satisfacer la demanda de energía al mínimo costo y satisfaciendo las condiciones de los contratos. Para esto usted debe seguir los siguientes pasos: \n" ] }, { @@ -297,8 +297,8 @@ "- $d_t$: demanda de energía en kWh para el mes $t\\in T$\n", "- $b_i$: Consumo máximo mensual de la generadora $i\\in G$\n", "- $m_i$: Duración de cada contrato de la generadora $i\\in G$\n", - "- $a_{ik}$: intercepto de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", - "- $p_{ik}$: pendiente de la ecuación $k\\in{1,2,3,4}$ para la generadora $i\\in G$\n", + "- $a_{ik}$: intercepto de la ecuación $k\\in\\{1,2,3,4\\}$ para la generadora $i\\in G$\n", + "- $p_{ik}$: pendiente de la ecuación $k\\in\\{1,2,3,4\\}$ para la generadora $i\\in G$\n", "\n", "### Variables de decisión\n", "- $x_{it}$: cantidad de kWh contratados a la generadora $i\\in G$ para el mes $t\\in T$\n", @@ -312,13 +312,7 @@ "metadata": {}, "source": [ "### Restricciones\n", - "**2.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que se debe respetar la demanda exacta en cada mes. \n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ + "**2.** Escriba la(s) restricción(es) lineal(es) que garantiza(n) que se debe respetar la demanda exacta en cada mes. \n", "$$\n", "\\begin{align*}\n", "\\sum_{i \\in G}x_{it} = d_t \\ \\ \\forall t \\in T.\n", @@ -467,7 +461,7 @@ }, { "cell_type": "code", - "execution_count": 399, + "execution_count": 408, "metadata": { "scrolled": true }, @@ -504,7 +498,7 @@ "# Conjuntos\n", "#-----------------\n", "# Generadoras\n", - "G=[\"Generadora 1\",\"Generadora 2\",\"Generadora 3\",]\n", + "G=[\"Generadora 1\",\"Generadora 2\",\"Generadora 3\"]\n", "\n", "# Periodos de planeación\n", "T = list(range(1,12+1)) # range excluye el final del intervalo.\n", From 6352001be039be3e6bdf5fdbefed40e766a1d8ff Mon Sep 17 00:00:00 2001 From: Daniel Duque Date: Wed, 22 Dec 2021 00:47:24 -0500 Subject: [PATCH 7/9] Change git autocrlf to avoid changing the endlines. --- optimizacion/Soluciones/CryptOR.ipynb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/optimizacion/Soluciones/CryptOR.ipynb b/optimizacion/Soluciones/CryptOR.ipynb index c65c71a..dae8d3e 100644 --- a/optimizacion/Soluciones/CryptOR.ipynb +++ b/optimizacion/Soluciones/CryptOR.ipynb @@ -42,7 +42,7 @@ }, { "cell_type": "code", - "execution_count": 405, + "execution_count": 409, "metadata": {}, "outputs": [ { @@ -97,7 +97,7 @@ }, { "cell_type": "code", - "execution_count": 406, + "execution_count": 410, "metadata": {}, "outputs": [ { @@ -116,7 +116,7 @@ "(-2.0, 40.0)" ] }, - "execution_count": 406, + "execution_count": 410, "metadata": {}, "output_type": "execute_result" }, @@ -196,7 +196,7 @@ }, { "cell_type": "code", - "execution_count": 407, + "execution_count": 411, "metadata": {}, "outputs": [ { @@ -382,7 +382,7 @@ "v_{it} & \\in \\{0,1\\} \\ \\ &&\\forall i\\in G,t\\in T.\\\\\n", "z_{it} & \\ge 0 \\ \\ &&\\forall i\\in G,t\\in D.\\\\\n", "\\end{align*}\n", - "$$" + "$$\n" ] }, { @@ -461,7 +461,7 @@ }, { "cell_type": "code", - "execution_count": 408, + "execution_count": 412, "metadata": { "scrolled": true }, From cf3ac67cfdc91e3d5c65465b64a136ff364310af Mon Sep 17 00:00:00 2001 From: Daniel Duque Date: Wed, 22 Dec 2021 00:59:48 -0500 Subject: [PATCH 8/9] Cambio de end-of-line manual --- optimizacion/Soluciones/CryptOR.ipynb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/optimizacion/Soluciones/CryptOR.ipynb b/optimizacion/Soluciones/CryptOR.ipynb index dae8d3e..7ce721b 100644 --- a/optimizacion/Soluciones/CryptOR.ipynb +++ b/optimizacion/Soluciones/CryptOR.ipynb @@ -42,7 +42,7 @@ }, { "cell_type": "code", - "execution_count": 409, + "execution_count": 413, "metadata": {}, "outputs": [ { @@ -97,7 +97,7 @@ }, { "cell_type": "code", - "execution_count": 410, + "execution_count": 414, "metadata": {}, "outputs": [ { @@ -116,7 +116,7 @@ "(-2.0, 40.0)" ] }, - "execution_count": 410, + "execution_count": 414, "metadata": {}, "output_type": "execute_result" }, @@ -196,7 +196,7 @@ }, { "cell_type": "code", - "execution_count": 411, + "execution_count": 415, "metadata": {}, "outputs": [ { @@ -278,7 +278,7 @@ "metadata": {}, "source": [ "
\n", - "Formule un modelo general de optimización lineal que le permita a CryptOR satisfacer la demanda de energía al mínimo costo y satisfaciendo las condiciones de los contratos. Para esto usted debe seguir los siguientes pasos: \n" + "Formule un modelo general de optimización lineal que le permita a CryptOR satisfacer la demanda de energía al mínimo costo y satisfaciendo las condiciones de los contratos. Para esto usted debe seguir los siguientes pasos:" ] }, { @@ -461,7 +461,7 @@ }, { "cell_type": "code", - "execution_count": 412, + "execution_count": 416, "metadata": { "scrolled": true }, From ca0d4b0ed951f635e80fb44e65a9d29e2e480fc9 Mon Sep 17 00:00:00 2001 From: Daniel Duque Date: Wed, 22 Dec 2021 20:33:54 -0500 Subject: [PATCH 9/9] Remover htlm de algunas celdas que cambiaban el layout del notebook. --- optimizacion/Enunciados/CryptOR.ipynb | 1 - optimizacion/Soluciones/CryptOR.ipynb | 1 - 2 files changed, 2 deletions(-) diff --git a/optimizacion/Enunciados/CryptOR.ipynb b/optimizacion/Enunciados/CryptOR.ipynb index fba499b..9a5069e 100644 --- a/optimizacion/Enunciados/CryptOR.ipynb +++ b/optimizacion/Enunciados/CryptOR.ipynb @@ -277,7 +277,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "Formule un modelo general de optimización lineal que le permita a CryptOR satisfacer la demanda de energía al mínimo costo y satisfaciendo las condiciones de los contratos. Para esto usted debe seguir los siguientes pasos: " ] }, diff --git a/optimizacion/Soluciones/CryptOR.ipynb b/optimizacion/Soluciones/CryptOR.ipynb index 7ce721b..4b6cadd 100644 --- a/optimizacion/Soluciones/CryptOR.ipynb +++ b/optimizacion/Soluciones/CryptOR.ipynb @@ -277,7 +277,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "Formule un modelo general de optimización lineal que le permita a CryptOR satisfacer la demanda de energía al mínimo costo y satisfaciendo las condiciones de los contratos. Para esto usted debe seguir los siguientes pasos:" ] },