Optprob/Производство металлических прутков — различия между версиями

Материал из DISCOPAL
Перейти к: навигация, поиск
м (StasFomin переименовал страницу Optprob/Производство слябов в Optprob/Производство металлических прутков без оставления перенаправления)
 
(не показано 12 промежуточных версий 2 участников)
Строка 2: Строка 2:
 
{{checked|}}
 
{{checked|}}
  
Есть металлургическая фабрика, на которой производятся типизированные ( j = 1 … n), n=50, слябы (металлические бруски).
+
[[File:Производство металлических прутков_2023-12-23_04-55-31_image0.png|right]]
  
Каждый брусок типа j имеет длину LA_j.  
+
Есть металлургическая фабрика, на которой производятся металлические пруты, на складе их ( j = 1 … n), n=50.
 +
Каждый прут ''j'' имеет длину LA_j (в сантиметрах, запятая там для красоты).  
  
{{WikiCutBegin|Типы брусков и сколько их на складе}}
+
{{WikiCutBegin|Металлические пруты на складе}}
 
<table class=wikitable>
 
<table class=wikitable>
<tr><th colspan="3">Warehousebars</th></tr><tr><th>Id</th><th>Length</th><th>Surplus</th></tr><tr class="odd"><td>1</td><td>3,000</td><td>400</td></tr>
+
<tr><th colspan="2">Warehousebars</th></tr><tr><th>Id</th><th>Length</th></tr><tr class="odd"><td>1</td><td>3,000</td></tr>
<tr><td>2</td><td>3,000</td><td>500</td></tr>
+
<tr><td>2</td><td>3,000</td></tr>
<tr class="odd"><td>3</td><td>3,000</td><td>1,200</td></tr>
+
<tr class="odd"><td>3</td><td>3,000</td></tr>
<tr><td>4</td><td>3,000</td><td>500</td></tr>
+
<tr><td>4</td><td>3,000</td></tr>
<tr class="odd"><td>5</td><td>3,000</td><td>200</td></tr>
+
<tr class="odd"><td>5</td><td>3,000</td></tr>
<tr><td>6</td><td>3,000</td><td>200</td></tr>
+
<tr><td>6</td><td>3,000</td></tr>
<tr class="odd"><td>7</td><td>3,000</td><td>800</td></tr>
+
<tr class="odd"><td>7</td><td>3,000</td></tr>
<tr><td>8</td><td>3,000</td><td>1,200</td></tr>
+
<tr><td>8</td><td>3,000</td></tr>
<tr class="odd"><td>9</td><td>3,000</td><td>500</td></tr>
+
<tr class="odd"><td>9</td><td>3,000</td></tr>
<tr><td>10</td><td>3,000</td><td>300</td></tr>
+
<tr><td>10</td><td>3,000</td></tr>
<tr class="odd"><td>11</td><td>2,500</td><td>500</td></tr>
+
<tr class="odd"><td>11</td><td>2,500</td></tr>
<tr><td>12</td><td>2,500</td><td>1,400</td></tr>
+
<tr><td>12</td><td>2,500</td></tr>
<tr class="odd"><td>13</td><td>2,500</td><td>499</td></tr>
+
<tr class="odd"><td>13</td><td>2,500</td></tr>
<tr><td>14</td><td>2,500</td><td>499</td></tr>
+
<tr><td>14</td><td>2,500</td></tr>
<tr class="odd"><td>15</td><td>2,500</td><td>500</td></tr>
+
<tr class="odd"><td>15</td><td>2,500</td></tr>
<tr><td>16</td><td>2,500</td><td>300</td></tr>
+
<tr><td>16</td><td>2,500</td></tr>
<tr class="odd"><td>17</td><td>2,500</td><td>500</td></tr>
+
<tr class="odd"><td>17</td><td>2,500</td></tr>
<tr><td>18</td><td>2,500</td><td>300</td></tr>
+
<tr><td>18</td><td>2,500</td></tr>
<tr class="odd"><td>19</td><td>2,500</td><td>500</td></tr>
+
<tr class="odd"><td>19</td><td>2,500</td></tr>
<tr><td>20</td><td>2,500</td><td>500</td></tr>
+
<tr><td>20</td><td>2,500</td></tr>
<tr class="odd"><td>21</td><td>2,000</td><td>500</td></tr>
+
<tr class="odd"><td>21</td><td>2,000</td></tr>
<tr><td>22</td><td>2,000</td><td>500</td></tr>
+
<tr><td>22</td><td>2,000</td></tr>
<tr class="odd"><td>23</td><td>2,000</td><td>900</td></tr>
+
<tr class="odd"><td>23</td><td>2,000</td></tr>
<tr><td>24</td><td>2,000</td><td>500</td></tr>
+
<tr><td>24</td><td>2,000</td></tr>
<tr class="odd"><td>25</td><td>2,000</td><td>300</td></tr>
+
<tr class="odd"><td>25</td><td>2,000</td></tr>
<tr><td>26</td><td>2,000</td><td>200</td></tr>
+
<tr><td>26</td><td>2,000</td></tr>
<tr class="odd"><td>27</td><td>2,000</td><td>400</td></tr>
+
<tr class="odd"><td>27</td><td>2,000</td></tr>
<tr><td>28</td><td>2,000</td><td>600</td></tr>
+
<tr><td>28</td><td>2,000</td></tr>
<tr class="odd"><td>29</td><td>2,000</td><td>500</td></tr>
+
<tr class="odd"><td>29</td><td>2,000</td></tr>
<tr><td>30</td><td>2,000</td><td>500</td></tr>
+
<tr><td>30</td><td>2,000</td></tr>
<tr class="odd"><td>31</td><td>1,500</td><td>300</td></tr>
+
<tr class="odd"><td>31</td><td>1,500</td></tr>
<tr><td>32</td><td>1,500</td><td>400</td></tr>
+
<tr><td>32</td><td>1,500</td></tr>
<tr class="odd"><td>33</td><td>1,500</td><td>300</td></tr>
+
<tr class="odd"><td>33</td><td>1,500</td></tr>
<tr><td>34</td><td>1,500</td><td>300</td></tr>
+
<tr><td>34</td><td>1,500</td></tr>
<tr class="odd"><td>35</td><td>1,500</td><td>300</td></tr>
+
<tr class="odd"><td>35</td><td>1,500</td></tr>
<tr><td>36</td><td>1,500</td><td>400</td></tr>
+
<tr><td>36</td><td>1,500</td></tr>
<tr class="odd"><td>37</td><td>1,500</td><td>400</td></tr>
+
<tr class="odd"><td>37</td><td>1,500</td></tr>
<tr><td>38</td><td>1,500</td><td>300</td></tr>
+
<tr><td>38</td><td>1,500</td></tr>
<tr class="odd"><td>39</td><td>1,500</td><td>1,500</td></tr>
+
<tr class="odd"><td>39</td><td>1,500</td></tr>
<tr><td>40</td><td>1,500</td><td>400</td></tr>
+
<tr><td>40</td><td>1,500</td></tr>
<tr class="odd"><td>101</td><td>1,500</td><td>1,500</td></tr>
+
<tr class="odd"><td>101</td><td>1,500</td></tr>
<tr><td>102</td><td>1,500</td><td>499</td></tr>
+
<tr><td>102</td><td>1,500</td></tr>
<tr class="odd"><td>103</td><td>1,500</td><td>300</td></tr>
+
<tr class="odd"><td>103</td><td>1,500</td></tr>
<tr><td>104</td><td>1,500</td><td>300</td></tr>
+
<tr><td>104</td><td>1,500</td></tr>
<tr class="odd"><td>105</td><td>1,500</td><td>400</td></tr>
+
<tr class="odd"><td>105</td><td>1,500</td></tr>
<tr><td>106</td><td>1,500</td><td>800</td></tr>
+
<tr><td>106</td><td>1,500</td></tr>
<tr class="odd"><td>107</td><td>1,500</td><td>400</td></tr>
+
<tr class="odd"><td>107</td><td>1,500</td></tr>
<tr><td>108</td><td>1,500</td><td>500</td></tr>
+
<tr><td>108</td><td>1,500</td></tr>
<tr class="odd"><td>109</td><td>1,500</td><td>1,500</td></tr>
+
<tr class="odd"><td>109</td><td>1,500</td></tr>
<tr><td>110</td><td>1,500</td><td>300</td></tr>
+
<tr><td>110</td><td>1,500</td></tr>
 
</table>
 
</table>
 
{{WikiCutEnd}}
 
{{WikiCutEnd}}
Строка 77: Строка 78:
 
</table>
 
</table>
  
На рынке не востребованы бруски длиной менее 2 м, поэтому мы хотим минимизировать
+
На рынке не востребованы бруски длиной менее 200 см, поэтому мы хотим минимизировать
 
общую длину избыточных кусков менее 2 м, т.е. минимизировать отходы.
 
общую длину избыточных кусков менее 2 м, т.е. минимизировать отходы.
 +
Мы также добавим «стоимость» (размерность в сантиметрах прута) C=200 для каждого используемого складского бруса, чтобы не использовать слишком много складских брусьев.
  
Я также мог бы рассмотреть в качестве спецификации запрет на использование кусков размером менее
+
Т.е. пусть целевая функция
2 м и как цель минимизировать количество используемых складских брусьев, но я
+
<math>
я использовал первую цель, потому что у нее было более интересное моделирование. Мы также добавим
+
    \sum_j d_j + C \times \alpha_j
стоимость C для каждого используемого складского бруса, чтобы не использовать слишком много складских брусьев.
+
</math>
 +
* где d_j — остаток прута j меньше 200см
 +
* <math>\alpha_j</math> — индикатор, что прут j вообще использовали.
  
 +
рассмотреть вариант
 +
* минимизировать количество используемых складских брусьев
 +
* запрет на использование кусков размером менее 2 м
  
 
+
Есть не совсем корректное решение (которое можно доделать):
 
+
{{Optsolv|incorrect/Производство_металлических_прутков.ipynb}}
 
+
* [[Участник:Robohant/Производство металлических прутков]]
{{@| Не готово, нужно дорабатывать}}
+
 
{{enddiv}}
 
{{enddiv}}
  
[[Категория:OptimizationProblems]]
+
{{Cat4Term2|{{FULLPAGENAME}}|OptimizationProblems}}

Текущая версия на 22:58, 4 октября 2024

Производство металлических прутков 2023-12-23 04-55-31 image0.png

Есть металлургическая фабрика, на которой производятся металлические пруты, на складе их ( j = 1 … n), n=50. Каждый прут j имеет длину LA_j (в сантиметрах, запятая там для красоты).


Получен заказ на набора запрошенных прутков десяти типов (i = 1...m, m=10). Каждый тип i имеет длину ld_i и количество брусков D_i.

DemandedBars
IdLengthNumber
11,2004
260020
350013
41,5002
52,0005
67005
79005
84005
91,00016
101,10014

На рынке не востребованы бруски длиной менее 200 см, поэтому мы хотим минимизировать общую длину избыточных кусков менее 2 м, т.е. минимизировать отходы. Мы также добавим «стоимость» (размерность в сантиметрах прута) C=200 для каждого используемого складского бруса, чтобы не использовать слишком много складских брусьев.

Т.е. пусть целевая функция

  • где d_j — остаток прута j меньше 200см
  • — индикатор, что прут j вообще использовали.

рассмотреть вариант

  • минимизировать количество используемых складских брусьев
  • запрет на использование кусков размером менее 2 м

Есть не совсем корректное решение (которое можно доделать):