Guest User

Untitled

a guest
Oct 17th, 2018
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.83 KB | None | 0 0
  1. {
  2. "cells": [
  3. {
  4. "cell_type": "markdown",
  5. "metadata": {},
  6. "source": [
  7. "**Дано**\n",
  8. "\n",
  9. "* Бренд выпускает $m$ продуктов, $i=1 \\dots m$\n",
  10. "* Используется $n$ рекламных форматов, $j=1 \\dots n$\n",
  11. "* Для каждого продукта производится $х_{i,j}$ рекламных форматов\n",
  12. "* $c_j$ - стоимость производства единицы формата $j$\n",
  13. "* $q_j$ - максимальное ко-во формата $j$, которое может быть произведено\n",
  14. "* $B$ - общий месячный бюджет \n",
  15. "* $е_j$ - эффективность формата $j$, например ко-во собираемых лайков\n",
  16. "* $E_i$ - целевая еффективность для $i$ продукта \n",
  17. "\n",
  18. "**Необходимо найти**\n",
  19. "* Оптимальное $x_{ji}$\n",
  20. " * Максимальную общую эффективность при фиксированном бюджете: \n",
  21. " $B \\leq \\sum\\limits_{i=1}^m \\sum \\limits_{j=1}^n x_{i,j} c_j$\n",
  22. " * Минимальный бюджет при заданной эффективности:\n",
  23. " $E_i \\geq \\sum \\limits_{j=1}^n x_{i,j} e_j$\n",
  24. " "
  25. ]
  26. },
  27. {
  28. "cell_type": "code",
  29. "execution_count": 43,
  30. "metadata": {},
  31. "outputs": [],
  32. "source": [
  33. "import numpy as np\n",
  34. "import cvxpy as cv"
  35. ]
  36. },
  37. {
  38. "cell_type": "code",
  39. "execution_count": 59,
  40. "metadata": {},
  41. "outputs": [
  42. {
  43. "name": "stdout",
  44. "output_type": "stream",
  45. "text": [
  46. "Ценa единицы форматa\n",
  47. " [1300. 3200. 3500. 6600. 4900. 3300. 1000. 5300. 3900. 4200.]\n",
  48. "Максимальное ко-во единиц форматa\n",
  49. " [250. 190. 220. 70. 280. 160. 160. 100. 280. 40.]\n",
  50. "Эффективность формата\n",
  51. " [9200. 7200. 7600. 9900. 5500. 8400. 900. 9300. 8600. 3400.]\n",
  52. "\n",
  53. "Целевая эффективность для продукта\n",
  54. " [345000. 50000. 320000. 30000. 255000.]\n",
  55. "Бюджет 100000\n"
  56. ]
  57. }
  58. ],
  59. "source": [
  60. "# m продуктов\n",
  61. "m = 5\n",
  62. "# n форматов\n",
  63. "n = 10\n",
  64. "# Цена формата\n",
  65. "c = np.around(np.random.uniform(size=n)*100)*100\n",
  66. "# возможности продакшена/платформы по форматам\n",
  67. "q = np.around(np.random.uniform(size=n)*10)*30+10\n",
  68. "# эффективность формата (например ко-во лайков)\n",
  69. "e = np.around(np.random.uniform(size=n)*100)*100\n",
  70. "# Цель, которую необходимо достигнуть по каждому из продуктов\n",
  71. "E = np.around(np.random.uniform(size=m)*100)*5000\n",
  72. "# Бюджет\n",
  73. "B = 100000\n",
  74. "\n",
  75. "print(\"Ценa единицы форматa\\n\", c)\n",
  76. "print(\"Максимальное ко-во единиц форматa\\n\", q)\n",
  77. "print(\"Эффективность формата\\n\", e)\n",
  78. "print()\n",
  79. "print(\"Целевая эффективность для продукта\\n\", E)\n",
  80. "print(\"Бюджет\",B)"
  81. ]
  82. },
  83. {
  84. "cell_type": "markdown",
  85. "metadata": {},
  86. "source": [
  87. "### Минимальный бюджет"
  88. ]
  89. },
  90. {
  91. "cell_type": "code",
  92. "execution_count": 60,
  93. "metadata": {},
  94. "outputs": [
  95. {
  96. "name": "stdout",
  97. "output_type": "stream",
  98. "text": [
  99. "Итоговый минимальный бюджет: 465542.9\n",
  100. "Выпускаем форматы:\n",
  101. " [[7. 6. 6. 3. 3. 7. 2. 3. 6. 2.]\n",
  102. " [1. 1. 1. 1. 1. 1. 2. 1. 1. 1.]\n",
  103. " [6. 6. 6. 3. 2. 6. 2. 3. 6. 2.]\n",
  104. " [0. 0. 0. 0. 1. 0. 1. 0. 0. 1.]\n",
  105. " [5. 5. 5. 2. 2. 5. 2. 2. 5. 2.]]\n",
  106. "Форматов на продукт:\n",
  107. " [45. 8. 42. 5. 34.]\n",
  108. "Ко-во формата:\t [19. 18. 18. 9. 9. 19. 9. 9. 18. 8.]\n",
  109. "\tлимит:\t [250. 190. 220. 70. 280. 160. 160. 100. 280. 40.]\n",
  110. "Эффективность:\n",
  111. " [[64400. 43200. 45600. 29700. 16500. 58800. 1800. 27900. 51600. 6800.]\n",
  112. " [ 9200. 7200. 7600. 9900. 5500. 8400. 1800. 9300. 8600. 3400.]\n",
  113. " [55200. 43200. 45600. 29700. 11000. 50400. 1800. 27900. 51600. 6800.]\n",
  114. " [ 0. 0. 0. 0. 5500. 0. 900. 0. 0. 3400.]\n",
  115. " [46000. 36000. 38000. 19800. 11000. 42000. 1800. 18600. 43000. 6800.]]\n",
  116. "\t [345000. 50000. 320000. 30000. 255000.]\n",
  117. "цель:\t [345000. 50000. 320000. 30000. 255000.]\n"
  118. ]
  119. }
  120. ],
  121. "source": [
  122. "# Искомое, ко-во форматов для каждого из продуктов\n",
  123. "# может быть только целым\n",
  124. "x = cv.Variable((m,n))\n",
  125. "\n",
  126. "# Условия\n",
  127. "cond = [\n",
  128. " x>=0, # ко-во публикаций должно быть больше нуля\n",
  129. " x.T*np.ones(m)<=q, # ко-во форматов ограничено\n",
  130. " x*e>=E, # эффективность по каждому из продуктов должна быть больше или равна цели\n",
  131. " cv.max(x.T*np.ones(m))-cv.min(x.T*np.ones(m)) <=10 # условие не дающе доминировать одному выгодному формату\n",
  132. "]\n",
  133. "\n",
  134. "# проблема, минимизруем суммарный кост\n",
  135. "prob = cv.Problem(cv.Minimize(cv.sum(x*c)), cond)\n",
  136. "result = prob.solve()\n",
  137. "\n",
  138. "print(\"Итоговый минимальный бюджет: %.1f\" % result)\n",
  139. "print(\"Выпускаем форматы:\\n\", np.around(x.value))\n",
  140. "print(\"Форматов на продукт:\\n\", np.around(np.dot(x.value, np.ones(n))))\n",
  141. "print(\"Ко-во формата:\\t\", np.dot(np.around(x.T.value), np.ones(m)))\n",
  142. "print(\"\\tлимит:\\t\", q)\n",
  143. "print(\"Эффективность:\\n\",e*np.around(x.value))\n",
  144. "print(\"\\t\", np.around(np.dot(x.value*e,np.ones(n))))\n",
  145. "print(\"цель:\\t\", E)"
  146. ]
  147. },
  148. {
  149. "cell_type": "code",
  150. "execution_count": null,
  151. "metadata": {},
  152. "outputs": [],
  153. "source": []
  154. }
  155. ],
  156. "metadata": {
  157. "kernelspec": {
  158. "display_name": "Python 3",
  159. "language": "python",
  160. "name": "python3"
  161. },
  162. "language_info": {
  163. "codemirror_mode": {
  164. "name": "ipython",
  165. "version": 3
  166. },
  167. "file_extension": ".py",
  168. "mimetype": "text/x-python",
  169. "name": "python",
  170. "nbconvert_exporter": "python",
  171. "pygments_lexer": "ipython3",
  172. "version": "3.6.6"
  173. }
  174. },
  175. "nbformat": 4,
  176. "nbformat_minor": 2
  177. }
Add Comment
Please, Sign In to add comment