SlideShare ist ein Scribd-Unternehmen logo
1 von 45
Downloaden Sie, um offline zu lesen
Theory of Constraints and Linear
         Programming
      Стас Фомин, stas@custis.ru
          Заказные ИнформСистемы


            4 августа 2009 г.




                                   1 / 45
Теория Ограничений Др. Элия Голдратта

1
     Идентифицируйте ограничения системы
2
     Решите, как эксплуатировать системные
     ограничения
3
     Скоординируйте все остальное с принятым
     решением
4
     Увеличьте пропускную способность
     ограничения
5
     Если на предыдущем этапе ограничение
     было снято, переходим к первому этапу
                                       2 / 45
Теория Ограничений Др. Элия Голдратта

1
     Идентифицируйте ограничения системы
2
     Решите, как эксплуатировать системные
     ограничения
3
     Скоординируйте все остальное с принятым
     решением
4
     Увеличьте пропускную способность
     ограничения
5
     Если на предыдущем этапе ограничение
     было снято, переходим к первому этапу
                                       3 / 45
Теория Ограничений Др. Элия Голдратта

1
     Идентифицируйте ограничения системы
2
     Решите, как эксплуатировать системные
     ограничения
3
     Скоординируйте все остальное с принятым
     решением
4
     Увеличьте пропускную способность
     ограничения
5
     Если на предыдущем этапе ограничение
     было снято, переходим к первому этапу
                                       4 / 45
Теория Ограничений Др. Элия Голдратта

1
     Идентифицируйте ограничения системы
2
     Решите, как эксплуатировать системные
     ограничения
3
     Скоординируйте все остальное с принятым
     решением
4
     Увеличьте пропускную способность
     ограничения
5
     Если на предыдущем этапе ограничение
     было снято, переходим к первому этапу
                                       5 / 45
Теория Ограничений Др. Элия Голдратта

1
     Идентифицируйте ограничения системы
2
     Решите, как эксплуатировать системные
     ограничения
3
     Скоординируйте все остальное с принятым
     решением
4
     Увеличьте пропускную способность
     ограничения
5
     Если на предыдущем этапе ограничение
     было снято, переходим к первому этапу
                                       6 / 45
Теория Ограничений Др. Элия Голдратта

1
     Идентифицируйте ограничения системы
2
     Решите, как эксплуатировать системные
     ограничения
3
     Скоординируйте все остальное с принятым
     решением
4
     Увеличьте пропускную способность
     ограничения
5
     Если на предыдущем этапе ограничение
     было снято, переходим к первому этапу
                                       7 / 45
Как найти «бутылочное горлышко»?
Иногда, «узкое горло» системных ограничений
очевидно:
   Загруженные станки
   Замученные рабочие
   Затоваренные склады
   ...
   Рост различных «буферов». . .



                                     8 / 45
Как найти «бутылочное горлышко»?
Но часто — нет.
    Сложный, не визуализированный процесс.
    Несуществующий, проектируемый процесс.
А ведь все меняется! Процессы, бизнес-процессы,
ограничения. . .

  Как гонятся за «бегающим бутылочным горлом»?

  Неужели только симуляцией на живых моделях?




                                              9 / 45
Как найти «бутылочное горлышко»?
Но часто — нет.
    Сложный, не визуализированный процесс.
    Несуществующий, проектируемый процесс.
А ведь все меняется! Процессы, бизнес-процессы,
ограничения. . .

  Как гонятся за «бегающим бутылочным горлом»?

  Неужели только симуляцией на живых моделях?




                                             10 / 45
Как найти «бутылочное горлышко»?
Но часто — нет.
    Сложный, не визуализированный процесс.
    Несуществующий, проектируемый процесс.
А ведь все меняется! Процессы, бизнес-процессы,
ограничения. . .

  Как гонятся за «бегающим бутылочным горлом»?

  Неужели только симуляцией на живых моделях?




                                             11 / 45
Как найти «бутылочное горлышко»?
Но часто — нет.
    Сложный, не визуализированный процесс.
    Несуществующий, проектируемый процесс.
А ведь все меняется! Процессы, бизнес-процессы,
ограничения. . .

  Как гонятся за «бегающим бутылочным горлом»?

  Неужели только симуляцией на живых моделях?




                                             12 / 45
Математическое моделирование




Часто, хотя и не всегда, может помочь математическое
моделирование.

А одна из самых распространенных моделей в матмоделировании:


      Линейное Программирование1
  1
   Появилось задолго до «нормального» программирования в
общепринятом смысле
                                                           13 / 45
Математическое моделирование




Часто, хотя и не всегда, может помочь математическое
моделирование.

А одна из самых распространенных моделей в матмоделировании:


      Линейное Программирование1
  1
   Появилось задолго до «нормального» программирования в
общепринятом смысле
                                                           14 / 45
Линейное программирование



 n
      cj xj → max,
j=1
       n
            aij xj ≤ bi   ∀i : 1 ≤ i ≤ m,
      j=1
               xj ≥ 0     ∀j : 1 ≤ j ≤ n.


                                        15 / 45
Giapetto Woodcarving Problem


Giapetto’s Woodcarving Inc. производит
солдатиков и паровозиков.
Два типа труда:
   Плотник (80 часов в неделю).
   Отделка (100 часов в неделю).
Спрос на паровозики — безграничен, на
солдатиков — не больше 40 в неделю.

                                         16 / 45
Солдатики и паровозики
Солдатик:
    Продается по $27 за штуку,
    Сырье — $10 на штуку.
    Затраты на $14.
    Плотник: 1 час.
    Отделка: 2 часа.

Паровозик:
    Продается по $21 за штуку,
    Cырье — $9 на штуку.
    Затраты на $10.
    Плотник: 1 час.
    Отделка: 1 часа.
                                  17 / 45
Цель



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




 2
     производимых еженедельно
                                     18 / 45
Моделирование: Целевая Функция

x1 : количество солдатиков
x2 : количество паровозиков

Прибыль:
PROFIT = (27 − 10 − 14)x1 + (21 − 9 − 10)x2
       = 3x1 + 2x2




                                     19 / 45
Моделирование: Ограничения




Отделка: 2x1 + x2 ≤ 100
Плотник: x1 + x2 ≤ 80
Спрос: x1 ≤ 40
Реальность: x1 ≥ 0, x2 ≥ 0

Кстати, что очевидно мы забыли?

                                  20 / 45
Моделирование: Ограничения




Отделка: 2x1 + x2 ≤ 100
Плотник: x1 + x2 ≤ 80
Спрос: x1 ≤ 40
Реальность: x1 ≥ 0, x2 ≥ 0

Кстати, что очевидно мы забыли?

                                  21 / 45
Задача Линейного Программирования




         3x1 + 2x2   ⇒   MAX
          2x1 + x2   ≤   100
           x1 + x2   ≤   80
                x1   ≤   40
                x1   ≥   0
                x2   ≥   0

                               22 / 45
90

80

70

60

50

40

30

20

10


 0   10   20   30   40   50   60   70   80   90

                                                  23 / 45
90

80

70

60

50

40

30

20

10


 0   10   20   30   40   50   60   70   80   90

                                                  24 / 45
90

80

70

60

50

40

30

20

10


 0   10   20   30   40   50   60   70   80   90

                                                  25 / 45
90

80

70

60

50

40

30

20

10


 0   10   20   30   40   50   60   70   80   90

                                                  26 / 45
90

80

70

60

50

40

30

20

10


 0   10   20   30   40   50   60   70   80   90

                                                  27 / 45
90

80

70

60

50

40

30

20

10


 0   10   20   30   40   50   60   70   80   90

                                                  28 / 45
Алгоритмы


90

80

70                                            Симплекс-метод
                                              (неполиномиален, но
60
                                              практичен)
50
                                              Метод внутренней точки
40                                            (полиномиален, и сейчас
30
                                              практичен)

20

10


 0   10   20   30    40   50   60   70   80   90

                                                                 29 / 45
Голдратт: «Синдром иголки в стоге сена»



 Завод выпускает 2 продукта: P и Q.
 Качественная продукция, дефектов нет.
 Цена фиксирована. Р — $90 за штуку, Q — $100 за штуку.
 Потенциал рынка в неделю: Р — 100 штук, Q — 50 штук.
 У оборудования нулевое время перенастройки.
 Каждый ресурс доступен 5 дней в неделю, 8 часов в день, 60
 минут в час = 2400 минут в неделю.
 Операционные расходы $6000 в неделю.




                                                 30 / 45
Голдратт: «Синдром иголки в стоге сена»
                 P            Q
               $90/шт      $100/шт
                     100 шт/нед.                  50 шт/нед.


                          D                          D
                        15 мин/шт.                 5 мин/шт.


  Деталь      C                         C                        B
           10 мин/шт.                5 мин/шт.            15 мин/шт.
  $5/шт


              A                         B                       A
           15 мин/шт.                15 мин/шт.           10 мин/шт.



           Материал 1           Материал 2                Материал 3
                                     $20/шт                    $20/шт
            $20/шт                                               31 / 45
Модель: Введем переменные
               P           Q
             $90/шт     $100/шт
                          100 шт/нед.                  50 шт/нед.
                                 L13                          L23
                               D                          D
        DetaL                15 мин/шт.                 5 мин/шт.
                        L12          L22a          L22b              L32

Деталь             C                         C                        B
                10 мин/шт.                5 мин/шт.            15 мин/шт.
$5/шт
                       L11                       L21                     L31
                   A                         B                       A
                15 мин/шт.                15 мин/шт.           10 мин/шт.

                       R1                        R2                       R3

                Материал 1             Материал 2              Материал 3
                                          $20/шт                    $20/шт
                 $20/шт                                               32 / 45
А теперь — Практика!




                       33 / 45
/* количество товаров */
var P >=0;    var Q >=0;
/* Ресурсы */
var R1 >=0; var R2 >=0; var R3 >=0; var DetaL >=0;
/*Производительность станков*/
var L11>=0; var L12>=0; var L13>=0; var L21>=0; var L22a>=0;
var L22b>=0; var L23>=0; var L31>=0; var L32>=0;
param WEEK           default 2400;     param COSTS             default 6000;
param PriceP         default 90;       param PriceQ            default 100;
param PriceMaterial default 20;        param PriceDetal        default 5;
/* функция цели */
maximize
profit: PriceP*P+PriceQ*Q            #          ..............................
           -COSTS                    #          |                                |
           -PriceMaterial*(R1+R2+R3) # /------------      /---------          |
           -PriceDetal*DetaL;        # |        P       |  |      Q    |         |
                                     # |      $90/шт    |  |$100/шт. |           | DetaL
/*ограничения */                     # |100шт/неделю|      |50шт/нед.|           |
Market_Share_P: P<=100;              # ------------/      ---------/         )-------(
Market_Share_Q: Q<=50;               #      |                   |              |Готовая|
                                     #      | L13               | L23          |деталь |
PLant_Pa: P=L13;                     #      |                   |              | $5/шт |
PLant_Pb: P=DetaL;                   #   O---------O         O--------O        )-------(
PLant_Q: Q=L23;                      #   |      D     |      |    D    |
                                     #   |15 мин/шт|        |5 мин/шт|
/*Граф производственных потоков*/    #   O---------O        O--------O
/*Первая производственная линия*/    #      |        | L22      |      |
Line_11: R1=L11;                     #      | L12 +-------+ | L22b +------+ L32
Line_12: L11=L12;                    #      |                | |               |
Line_13: L12=L13;                    #   O---------O         O--------O      O-’-------O
                                     #   |      С     |      |    С    |     |     B     |
/*Вторая производственная линия*/    #   |10 мин/шт|         |5 мин/шт|     |15 мин/шт|
Line_21: R2=L21;                     #   O---------O         O--------O      O---------O
Line_22: L21=L22a+L22b;              #      |                   |              |
Line_23a: L22a=L13;                  #      | L11               | L21          | L31
Line_23b: L22b=L23;                  #      |                   |              |
                                     #   O---------O        O---------O      O---------O
/*Третья производственная линия*/    #   |      A     |     |       B   |    |     A     |
Line_31: R3=L31;                     #   |15 мин/шт|         |15 мин/шт|     |10 мин/шт|
Line_32: L31=L32;                    #   O---------O         O---------O     O---------O
Line_33: L23=L32;                    #      |                   |              |
                                     #      | R1                | R2           | R3
/*Ограничения ресурсов*/             #      |                   |              |
A: 15*L11 + 10*L31 <= WEEK;          #     )--------(          )--------(   )--------(
B: 15*L21 + 15*L32 <= WEEK;          #     |Ресурс 1|          |Ресурс 2|   |Ресурс 3|
C: 10*L12 + 5*L21 <= WEEK;           #     | $20/шт |          | $20/шт |    | $20/шт |
D: 15*L13 + 5*L23 <= WEEK;           #     )--------(          )--------(   )--------(
end;

                                                                                             34 / 45
Голдратт: Начальная ситуация с заводом




. . . Итоговая скорость генерации дохода
компании теперь будет 6300$. Вычтем 6000$
на операционные расходы. Чистая прибыль той
же самой компании — теперь плюс 300$ в
неделю. Плюс или минус, какая разница? . . .




                                     35 / 45
ЛП: Начальная ситуация с заводом
Все сходится. profit = 300, упираемся3 в ограничение B.
Objective:   profit = 300 (MAXimum)

   No.   Row name   St   Activity     Lower bound   Upper bound    Marginal
------ ------------ -- ------------- ------------- ------------- -------------
     1 profit       B           6300
     2 Market_Share_P
                    NU           100                         100            15
     3 Market_Share_Q
                    B             30                          50
    17 A            B           1800                        2400
    18 B            NU          2400                        2400             2
    19 C            B           1650                        2400
    20 D            B           1650                        2400

   No.   Column name    St   Activity     Lower bound   Upper bound    Marginal
------   ------------   -- ------------- ------------- ------------- -------------
     1   P              B             100             0
     2   Q              B              30             0
     3   R1             B             100             0
     4   R2             B             130             0
     5   R3             B              30             0
     6   DetaL          B             100            0
   3
       «NU» — уперлись в Upper Bound
                                                                        36 / 45
Голдратт: Усилим ресурс «B»!
Давайте купим еще одну В машину. . . . Если мы собираемся не
просто заставить завод оборудованием, а зарабатывать деньги,
нужно нанять еще одного специалиста. Предположим мы нашли
его. . . . Всего $400 долларов, включая премиальные. . . . Поэтому
операционные расходы компании возросли до 6400$ в неделю.
...
P дает 100 X 45 = 4500 долларов, и Q дает еще 50 X 60 = 3000
долларов генерации дохода. Итого $7500. Вычитаем отсюда
операционные расходы. Помните теперь они $6400 потому, что
мы наняли еще одного рабочего. Чистая прибыль $1100 в
неделю. Но мы не можем пустить все эти деньги на покрытие
инвестиций. До этого мы зарабатывали прибыль. Поэтому вы
можем использовать только увеличение чистой прибыли, которая
появляется в результате покупки новой машины. Увеличение
чистой прибыли составляет $1100 - $300 = $800 дополнительной
прибыли в неделю.
                                                        37 / 45
ЛП: Усилим ресурс «B»!
Все сходится. profit = 1100, упираемся в рынок.
Objective:   profit = 1100 (MAXimum)

   No.   Row name   St   Activity     Lower bound   Upper bound    Marginal
------ ------------ -- ------------- ------------- ------------- -------------
     1 profit       B           7500
     2 Market_Share_P
                    NU           100                         100            45
     3 Market_Share_Q
                    NU            50                          50            60
    17 A            B           2000                        2400
    18 B            B           3000                        4800
    19 C            B           1750                        2400
    20 D            B           1750                        2400

   No.   Column name    St   Activity     Lower bound   Upper bound    Marginal
------   ------------   -- ------------- ------------- ------------- -------------
     1   P              B             100             0
     2   Q              B              50             0
     3   R1             B             100             0
     4   R2             B             150             0
     5   R3             B              50             0
     6   DetaL          B             100            0



                                                                        38 / 45
Голдратт: Демпинг в Японии по продукту P.

. . . Продажа 100 Р дает 4500 долларов на домашнем рынке, но
это требует 1500 минут А. 50 изделий Q на домашнем рынке
дадут дополнительные 3000 дохода, и потребуют взамен 5000
минут ресурса А. Это оставляет нам излишек в 400 минут
«свободных» минут ресурса А... Давайте "подэмпингуем"в
Японии. Сколько Р мы можем произвести на ресурсе А за 400
минут? Около 26 штук. Генерация дохода уже не 45 долларов
потому, что мы продаем в Японии. А только $72 - $45 = 27
долларов дохода. Поэтому продажи в Японии дадут нам
дополнительные 700 долларов генерации дохода. Стоит ли
беспокоиться из-за такого ничтожного количества. Давайте
посчитаем. Итоговая генерация теперь $8200. Минус $6400
операционных расходов, минус $300 исходной чистой прибыли,
дает изменение чистой прибыли до $1500 в неделю.

                                                    39 / 45
ЛП: Демпинг в Японии по продукту P.
Objective:   profit = 1820 (MAXimum)

   No.   Row name   St   Activity     Lower bound   Upper bound    Marginal
------ ------------ -- ------------- ------------- ------------- -------------
     1 profit       B           8220
     2 Market_Share_P
                    NU           100                         100            18
     3 Market_Share_Q
                    NU            50                          50            42
    17 A            NU          2400                        2400           1.8
    18 B            B           3400                        4800
    19 C            B           2150                        2400
    20 D            B           2150                        2400

   No.   Column name    St   Activity     Lower bound   Upper bound    Marginal
------   ------------   -- ------------- ------------- ------------- -------------
     1   P              B             100             0
     2   Pjap           B        26.6667              0
     3   Q              B              50             0
     4   R1             B        126.667              0
     5   R2             B        176.667              0
     6   R3             B              50             0
     7   DetaL          B        126.667              0

Упс! Лишних $20! Это мы забыли ограничения целочисленности продуктов. Добавим их!

                                                                        40 / 45
ЦЛП: Демпинг в Японии по продукту P.
Теперь все корректно, и мы обогнали Голдратта на $2!
Objective:   profit = 1802 (MAXimum)

   No.   Row name           Activity     Lower bound   Upper bound
------ ------------       ------------- ------------- -------------
     1 profit                      8202
     2 Market_Share_P
                                    100                        100
     3 Market_Share_Q
                                    50                          50
    17   A                        2390                        2400
    18   B                        3390                        4800
    19   C                        2140                        2400
    20   D                        2140                        2400

   No.   Column name        Activity     Lower bound   Upper bound
------   ------------     ------------- ------------- -------------
     1   P            *              100             0
     2   Pjap         *               26             0
     3   Q            *               50             0
     4   R1                          126             0
     5   R2                          176             0
     6   R3                           50             0
     7   DetaL                       126             0


                                                                      41 / 45
Голдратт: Демпинг в Японии по продукту Q.
. . . Давайте попробуем подемпинговать в Японии продуктом Q.
Давайте потратим дополнительные 400 минут ресурса А на
производство Q. Мы сможем произвести 40 единиц, поскольку
этот продукт требует только 10 минут ограничивающего ресурса.
Генерация дохода на каждом Q проданном в Японии составляет
$80 минус $40 за материалы, получается $40. Значит продажа Q
в Японии дает дополнительные 1600$ чистой прибыли, вместо
$700 полученных с Р. Это увеличение чистой прибыли на $900.
Мы уже спешим в Японию, почему бы не продавать этот
выгодный продукт? ИНЕРЦИЯ! Понимаем ли мы значение этого
термина? Неужели мы полностью осознаем эти разрушительные
риски. Ответ до сих пор НЕТ. С чего это мы вдруг решили, что
должны сначала вложиться в продажу на домашних рынках, и
только потом экспортировать? Потому, что в нашей картине до
этого не было экспорта. ИНЕРЦИЯ! ВОЗВРАЩАЕМСЯ К ШАГУ
1, НО НЕ ДОПУСКАЙТЕ ИНЕРЦИИ.
                                                    42 / 45
ЛП: Демпинг в Японии по продукту Q.
Оп-па! Мы обогнали Голдратта на $300! Он не учел, что можно сбросить не только
производство P для Японии, но и P для исходного рынка! Борясь с «инерцией
мышления» он сам по инерции попал в ловушку (ограничил продажи P в Японии 40
единицами).
Objective:   profit = 3000 (MAXimum)

   No.   Row name   St   Activity     Lower bound   Upper bound    Marginal
------ ------------ -- ------------- ------------- ------------- -------------
     1 profit       B           9400
     2 Market_Share_P
                    B             80                         100
     3 Market_Share_Q
                    NU            50                          50            20
    17 A            NU          2400                        2400           2.5
    18 B            NU          4800                        4800           0.5
    19 C            B           1800                        2400
    20 D            B           1800                        2400

   No.   Column name    St   Activity     Lower bound   Upper bound    Marginal
------   ------------   -- ------------- ------------- ------------- -------------
     1   P              B              80             0
     2   Pjap           NL              0             0                         -18
     3   Q              B              50             0
     4   Qjap           B              70             0
     5   R1             B              80             0
     6   R2             B             200             0
     7   R3             B             120             0
     8   DetaL          B              80            0
                                                                         43 / 45
ЛП: Учтем «оговорку-ограничение» по Qjap.
Проверим — да, если мы введем в нашу модель неявное ограничение Голдратта, что в
Японии не продать больше, чем 40 единиц P, мы получим в точности его результат.
Objective:   profit = 2700 (MAXimum)

   No.   Row name   St   Activity     Lower bound   Upper bound    Marginal
------ ------------ -- ------------- ------------- ------------- -------------
     1 profit       B           9100
     2 Market_Share_P
                    NU           100                         100            18
     3 Market_Share_Q
                    NU            50                          50            42
     4 Market_Share_Qjap
                    NU            40                          40            22
    18 A            NU          2400                        2400           1.8
    19 B            B           4200                        4800
    20 C            B           1950                        2400
    21 D            B           1950                        2400

   No.   Column name    St   Activity     Lower bound   Upper bound    Marginal
------   ------------   -- ------------- ------------- ------------- -------------
     1   P              B             100             0
     2   Pjap           B               0             0
     3   Q              B              50             0
     4   Qjap           B              40             0
     5   R1             B             100             0
     6   R2             B             190             0
     7   R3             B              90             0
     8   DetaL          B             100            0
                                                                        44 / 45
Выводы
     Человек не рожден для вычислений.
     Рассуждения в литературной форме из-за
     аббераций восприятия легко уводят от оптимума.
     Поиск оптимума в виде рассуждений трудно
     верифицировать.
     Если есть возможность — составьте
     математическую модель. Человеку ее легко
     верифицировать. А машине — легко4 найти
     решение.
                Глобальных всем оптимумов!

4
    Мы опускаем тут вопрос сложности решения задач ЦЛП
                                                         45 / 45

Weitere ähnliche Inhalte

Mehr von Stas Fomin

Levenstein distance.beam
Levenstein distance.beamLevenstein distance.beam
Levenstein distance.beamStas Fomin
 
testopia-missing-link
testopia-missing-linktestopia-missing-link
testopia-missing-linkStas Fomin
 
«Собор или базар»: системы контроля версий — централизованные или распределен...
«Собор или базар»: системы контроля версий — централизованные или распределен...«Собор или базар»: системы контроля версий — централизованные или распределен...
«Собор или базар»: системы контроля версий — централизованные или распределен...Stas Fomin
 
Какой у вас Agile: свежевыжатый или порошковый?
Какой у вас Agile: свежевыжатый или порошковый?Какой у вас Agile: свежевыжатый или порошковый?
Какой у вас Agile: свежевыжатый или порошковый?Stas Fomin
 
Mindmaps: история и идеология
Mindmaps: история и идеологияMindmaps: история и идеология
Mindmaps: история и идеологияStas Fomin
 
Введение в Subversion
Введение в SubversionВведение в Subversion
Введение в SubversionStas Fomin
 
Randomized Complexity
Randomized ComplexityRandomized Complexity
Randomized ComplexityStas Fomin
 
P Reducibility And Npc
P Reducibility And NpcP Reducibility And Npc
P Reducibility And NpcStas Fomin
 
Probabilistically Checkable Proofs
Probabilistically Checkable ProofsProbabilistically Checkable Proofs
Probabilistically Checkable ProofsStas Fomin
 
Obfuscation Curstate Review
Obfuscation Curstate ReviewObfuscation Curstate Review
Obfuscation Curstate ReviewStas Fomin
 
Maximal Independent Set
Maximal Independent SetMaximal Independent Set
Maximal Independent SetStas Fomin
 
Intro And Samples
Intro And SamplesIntro And Samples
Intro And SamplesStas Fomin
 
Greedy Knapsack
Greedy KnapsackGreedy Knapsack
Greedy KnapsackStas Fomin
 
Greedy Covering Almost Ok
Greedy Covering Almost OkGreedy Covering Almost Ok
Greedy Covering Almost OkStas Fomin
 
Greedy Covering
Greedy CoveringGreedy Covering
Greedy CoveringStas Fomin
 
Dynamic Programming Knapsack
Dynamic Programming KnapsackDynamic Programming Knapsack
Dynamic Programming KnapsackStas Fomin
 
Randomized Rounding
Randomized RoundingRandomized Rounding
Randomized RoundingStas Fomin
 

Mehr von Stas Fomin (20)

Levenstein distance.beam
Levenstein distance.beamLevenstein distance.beam
Levenstein distance.beam
 
testopia-missing-link
testopia-missing-linktestopia-missing-link
testopia-missing-link
 
«Собор или базар»: системы контроля версий — централизованные или распределен...
«Собор или базар»: системы контроля версий — централизованные или распределен...«Собор или базар»: системы контроля версий — централизованные или распределен...
«Собор или базар»: системы контроля версий — централизованные или распределен...
 
Какой у вас Agile: свежевыжатый или порошковый?
Какой у вас Agile: свежевыжатый или порошковый?Какой у вас Agile: свежевыжатый или порошковый?
Какой у вас Agile: свежевыжатый или порошковый?
 
Mindmaps: история и идеология
Mindmaps: история и идеологияMindmaps: история и идеология
Mindmaps: история и идеология
 
Введение в Subversion
Введение в SubversionВведение в Subversion
Введение в Subversion
 
Randomized Complexity
Randomized ComplexityRandomized Complexity
Randomized Complexity
 
Ptas Knapsack
Ptas KnapsackPtas Knapsack
Ptas Knapsack
 
P Reducibility And Npc
P Reducibility And NpcP Reducibility And Npc
P Reducibility And Npc
 
Probabilistically Checkable Proofs
Probabilistically Checkable ProofsProbabilistically Checkable Proofs
Probabilistically Checkable Proofs
 
Obfuscation Curstate Review
Obfuscation Curstate ReviewObfuscation Curstate Review
Obfuscation Curstate Review
 
Maximal Independent Set
Maximal Independent SetMaximal Independent Set
Maximal Independent Set
 
Intro Erevan
Intro ErevanIntro Erevan
Intro Erevan
 
Intro And Samples
Intro And SamplesIntro And Samples
Intro And Samples
 
Greedy Knapsack
Greedy KnapsackGreedy Knapsack
Greedy Knapsack
 
Greedy Covering Almost Ok
Greedy Covering Almost OkGreedy Covering Almost Ok
Greedy Covering Almost Ok
 
Greedy Covering
Greedy CoveringGreedy Covering
Greedy Covering
 
Dynamic Programming Knapsack
Dynamic Programming KnapsackDynamic Programming Knapsack
Dynamic Programming Knapsack
 
Randomized Rounding
Randomized RoundingRandomized Rounding
Randomized Rounding
 
Dnf Counting
Dnf CountingDnf Counting
Dnf Counting
 

Теория ограничений и Линейное программирование

  • 1. Theory of Constraints and Linear Programming Стас Фомин, stas@custis.ru Заказные ИнформСистемы 4 августа 2009 г. 1 / 45
  • 2. Теория Ограничений Др. Элия Голдратта 1 Идентифицируйте ограничения системы 2 Решите, как эксплуатировать системные ограничения 3 Скоординируйте все остальное с принятым решением 4 Увеличьте пропускную способность ограничения 5 Если на предыдущем этапе ограничение было снято, переходим к первому этапу 2 / 45
  • 3. Теория Ограничений Др. Элия Голдратта 1 Идентифицируйте ограничения системы 2 Решите, как эксплуатировать системные ограничения 3 Скоординируйте все остальное с принятым решением 4 Увеличьте пропускную способность ограничения 5 Если на предыдущем этапе ограничение было снято, переходим к первому этапу 3 / 45
  • 4. Теория Ограничений Др. Элия Голдратта 1 Идентифицируйте ограничения системы 2 Решите, как эксплуатировать системные ограничения 3 Скоординируйте все остальное с принятым решением 4 Увеличьте пропускную способность ограничения 5 Если на предыдущем этапе ограничение было снято, переходим к первому этапу 4 / 45
  • 5. Теория Ограничений Др. Элия Голдратта 1 Идентифицируйте ограничения системы 2 Решите, как эксплуатировать системные ограничения 3 Скоординируйте все остальное с принятым решением 4 Увеличьте пропускную способность ограничения 5 Если на предыдущем этапе ограничение было снято, переходим к первому этапу 5 / 45
  • 6. Теория Ограничений Др. Элия Голдратта 1 Идентифицируйте ограничения системы 2 Решите, как эксплуатировать системные ограничения 3 Скоординируйте все остальное с принятым решением 4 Увеличьте пропускную способность ограничения 5 Если на предыдущем этапе ограничение было снято, переходим к первому этапу 6 / 45
  • 7. Теория Ограничений Др. Элия Голдратта 1 Идентифицируйте ограничения системы 2 Решите, как эксплуатировать системные ограничения 3 Скоординируйте все остальное с принятым решением 4 Увеличьте пропускную способность ограничения 5 Если на предыдущем этапе ограничение было снято, переходим к первому этапу 7 / 45
  • 8. Как найти «бутылочное горлышко»? Иногда, «узкое горло» системных ограничений очевидно: Загруженные станки Замученные рабочие Затоваренные склады ... Рост различных «буферов». . . 8 / 45
  • 9. Как найти «бутылочное горлышко»? Но часто — нет. Сложный, не визуализированный процесс. Несуществующий, проектируемый процесс. А ведь все меняется! Процессы, бизнес-процессы, ограничения. . . Как гонятся за «бегающим бутылочным горлом»? Неужели только симуляцией на живых моделях? 9 / 45
  • 10. Как найти «бутылочное горлышко»? Но часто — нет. Сложный, не визуализированный процесс. Несуществующий, проектируемый процесс. А ведь все меняется! Процессы, бизнес-процессы, ограничения. . . Как гонятся за «бегающим бутылочным горлом»? Неужели только симуляцией на живых моделях? 10 / 45
  • 11. Как найти «бутылочное горлышко»? Но часто — нет. Сложный, не визуализированный процесс. Несуществующий, проектируемый процесс. А ведь все меняется! Процессы, бизнес-процессы, ограничения. . . Как гонятся за «бегающим бутылочным горлом»? Неужели только симуляцией на живых моделях? 11 / 45
  • 12. Как найти «бутылочное горлышко»? Но часто — нет. Сложный, не визуализированный процесс. Несуществующий, проектируемый процесс. А ведь все меняется! Процессы, бизнес-процессы, ограничения. . . Как гонятся за «бегающим бутылочным горлом»? Неужели только симуляцией на живых моделях? 12 / 45
  • 13. Математическое моделирование Часто, хотя и не всегда, может помочь математическое моделирование. А одна из самых распространенных моделей в матмоделировании: Линейное Программирование1 1 Появилось задолго до «нормального» программирования в общепринятом смысле 13 / 45
  • 14. Математическое моделирование Часто, хотя и не всегда, может помочь математическое моделирование. А одна из самых распространенных моделей в матмоделировании: Линейное Программирование1 1 Появилось задолго до «нормального» программирования в общепринятом смысле 14 / 45
  • 15. Линейное программирование n cj xj → max, j=1 n aij xj ≤ bi ∀i : 1 ≤ i ≤ m, j=1 xj ≥ 0 ∀j : 1 ≤ j ≤ n. 15 / 45
  • 16. Giapetto Woodcarving Problem Giapetto’s Woodcarving Inc. производит солдатиков и паровозиков. Два типа труда: Плотник (80 часов в неделю). Отделка (100 часов в неделю). Спрос на паровозики — безграничен, на солдатиков — не больше 40 в неделю. 16 / 45
  • 17. Солдатики и паровозики Солдатик: Продается по $27 за штуку, Сырье — $10 на штуку. Затраты на $14. Плотник: 1 час. Отделка: 2 часа. Паровозик: Продается по $21 за штуку, Cырье — $9 на штуку. Затраты на $10. Плотник: 1 час. Отделка: 1 часа. 17 / 45
  • 18. Цель Найти количество2 солдатиков и паровозиков, производство которых позволит максимально увеличить прибыль. 2 производимых еженедельно 18 / 45
  • 19. Моделирование: Целевая Функция x1 : количество солдатиков x2 : количество паровозиков Прибыль: PROFIT = (27 − 10 − 14)x1 + (21 − 9 − 10)x2 = 3x1 + 2x2 19 / 45
  • 20. Моделирование: Ограничения Отделка: 2x1 + x2 ≤ 100 Плотник: x1 + x2 ≤ 80 Спрос: x1 ≤ 40 Реальность: x1 ≥ 0, x2 ≥ 0 Кстати, что очевидно мы забыли? 20 / 45
  • 21. Моделирование: Ограничения Отделка: 2x1 + x2 ≤ 100 Плотник: x1 + x2 ≤ 80 Спрос: x1 ≤ 40 Реальность: x1 ≥ 0, x2 ≥ 0 Кстати, что очевидно мы забыли? 21 / 45
  • 22. Задача Линейного Программирования 3x1 + 2x2 ⇒ MAX 2x1 + x2 ≤ 100 x1 + x2 ≤ 80 x1 ≤ 40 x1 ≥ 0 x2 ≥ 0 22 / 45
  • 23. 90 80 70 60 50 40 30 20 10 0 10 20 30 40 50 60 70 80 90 23 / 45
  • 24. 90 80 70 60 50 40 30 20 10 0 10 20 30 40 50 60 70 80 90 24 / 45
  • 25. 90 80 70 60 50 40 30 20 10 0 10 20 30 40 50 60 70 80 90 25 / 45
  • 26. 90 80 70 60 50 40 30 20 10 0 10 20 30 40 50 60 70 80 90 26 / 45
  • 27. 90 80 70 60 50 40 30 20 10 0 10 20 30 40 50 60 70 80 90 27 / 45
  • 28. 90 80 70 60 50 40 30 20 10 0 10 20 30 40 50 60 70 80 90 28 / 45
  • 29. Алгоритмы 90 80 70 Симплекс-метод (неполиномиален, но 60 практичен) 50 Метод внутренней точки 40 (полиномиален, и сейчас 30 практичен) 20 10 0 10 20 30 40 50 60 70 80 90 29 / 45
  • 30. Голдратт: «Синдром иголки в стоге сена» Завод выпускает 2 продукта: P и Q. Качественная продукция, дефектов нет. Цена фиксирована. Р — $90 за штуку, Q — $100 за штуку. Потенциал рынка в неделю: Р — 100 штук, Q — 50 штук. У оборудования нулевое время перенастройки. Каждый ресурс доступен 5 дней в неделю, 8 часов в день, 60 минут в час = 2400 минут в неделю. Операционные расходы $6000 в неделю. 30 / 45
  • 31. Голдратт: «Синдром иголки в стоге сена» P Q $90/шт $100/шт 100 шт/нед. 50 шт/нед. D D 15 мин/шт. 5 мин/шт. Деталь C C B 10 мин/шт. 5 мин/шт. 15 мин/шт. $5/шт A B A 15 мин/шт. 15 мин/шт. 10 мин/шт. Материал 1 Материал 2 Материал 3 $20/шт $20/шт $20/шт 31 / 45
  • 32. Модель: Введем переменные P Q $90/шт $100/шт 100 шт/нед. 50 шт/нед. L13 L23 D D DetaL 15 мин/шт. 5 мин/шт. L12 L22a L22b L32 Деталь C C B 10 мин/шт. 5 мин/шт. 15 мин/шт. $5/шт L11 L21 L31 A B A 15 мин/шт. 15 мин/шт. 10 мин/шт. R1 R2 R3 Материал 1 Материал 2 Материал 3 $20/шт $20/шт $20/шт 32 / 45
  • 33. А теперь — Практика! 33 / 45
  • 34. /* количество товаров */ var P >=0; var Q >=0; /* Ресурсы */ var R1 >=0; var R2 >=0; var R3 >=0; var DetaL >=0; /*Производительность станков*/ var L11>=0; var L12>=0; var L13>=0; var L21>=0; var L22a>=0; var L22b>=0; var L23>=0; var L31>=0; var L32>=0; param WEEK default 2400; param COSTS default 6000; param PriceP default 90; param PriceQ default 100; param PriceMaterial default 20; param PriceDetal default 5; /* функция цели */ maximize profit: PriceP*P+PriceQ*Q # .............................. -COSTS # | | -PriceMaterial*(R1+R2+R3) # /------------ /--------- | -PriceDetal*DetaL; # | P | | Q | | # | $90/шт | |$100/шт. | | DetaL /*ограничения */ # |100шт/неделю| |50шт/нед.| | Market_Share_P: P<=100; # ------------/ ---------/ )-------( Market_Share_Q: Q<=50; # | | |Готовая| # | L13 | L23 |деталь | PLant_Pa: P=L13; # | | | $5/шт | PLant_Pb: P=DetaL; # O---------O O--------O )-------( PLant_Q: Q=L23; # | D | | D | # |15 мин/шт| |5 мин/шт| /*Граф производственных потоков*/ # O---------O O--------O /*Первая производственная линия*/ # | | L22 | | Line_11: R1=L11; # | L12 +-------+ | L22b +------+ L32 Line_12: L11=L12; # | | | | Line_13: L12=L13; # O---------O O--------O O-’-------O # | С | | С | | B | /*Вторая производственная линия*/ # |10 мин/шт| |5 мин/шт| |15 мин/шт| Line_21: R2=L21; # O---------O O--------O O---------O Line_22: L21=L22a+L22b; # | | | Line_23a: L22a=L13; # | L11 | L21 | L31 Line_23b: L22b=L23; # | | | # O---------O O---------O O---------O /*Третья производственная линия*/ # | A | | B | | A | Line_31: R3=L31; # |15 мин/шт| |15 мин/шт| |10 мин/шт| Line_32: L31=L32; # O---------O O---------O O---------O Line_33: L23=L32; # | | | # | R1 | R2 | R3 /*Ограничения ресурсов*/ # | | | A: 15*L11 + 10*L31 <= WEEK; # )--------( )--------( )--------( B: 15*L21 + 15*L32 <= WEEK; # |Ресурс 1| |Ресурс 2| |Ресурс 3| C: 10*L12 + 5*L21 <= WEEK; # | $20/шт | | $20/шт | | $20/шт | D: 15*L13 + 5*L23 <= WEEK; # )--------( )--------( )--------( end; 34 / 45
  • 35. Голдратт: Начальная ситуация с заводом . . . Итоговая скорость генерации дохода компании теперь будет 6300$. Вычтем 6000$ на операционные расходы. Чистая прибыль той же самой компании — теперь плюс 300$ в неделю. Плюс или минус, какая разница? . . . 35 / 45
  • 36. ЛП: Начальная ситуация с заводом Все сходится. profit = 300, упираемся3 в ограничение B. Objective: profit = 300 (MAXimum) No. Row name St Activity Lower bound Upper bound Marginal ------ ------------ -- ------------- ------------- ------------- ------------- 1 profit B 6300 2 Market_Share_P NU 100 100 15 3 Market_Share_Q B 30 50 17 A B 1800 2400 18 B NU 2400 2400 2 19 C B 1650 2400 20 D B 1650 2400 No. Column name St Activity Lower bound Upper bound Marginal ------ ------------ -- ------------- ------------- ------------- ------------- 1 P B 100 0 2 Q B 30 0 3 R1 B 100 0 4 R2 B 130 0 5 R3 B 30 0 6 DetaL B 100 0 3 «NU» — уперлись в Upper Bound 36 / 45
  • 37. Голдратт: Усилим ресурс «B»! Давайте купим еще одну В машину. . . . Если мы собираемся не просто заставить завод оборудованием, а зарабатывать деньги, нужно нанять еще одного специалиста. Предположим мы нашли его. . . . Всего $400 долларов, включая премиальные. . . . Поэтому операционные расходы компании возросли до 6400$ в неделю. ... P дает 100 X 45 = 4500 долларов, и Q дает еще 50 X 60 = 3000 долларов генерации дохода. Итого $7500. Вычитаем отсюда операционные расходы. Помните теперь они $6400 потому, что мы наняли еще одного рабочего. Чистая прибыль $1100 в неделю. Но мы не можем пустить все эти деньги на покрытие инвестиций. До этого мы зарабатывали прибыль. Поэтому вы можем использовать только увеличение чистой прибыли, которая появляется в результате покупки новой машины. Увеличение чистой прибыли составляет $1100 - $300 = $800 дополнительной прибыли в неделю. 37 / 45
  • 38. ЛП: Усилим ресурс «B»! Все сходится. profit = 1100, упираемся в рынок. Objective: profit = 1100 (MAXimum) No. Row name St Activity Lower bound Upper bound Marginal ------ ------------ -- ------------- ------------- ------------- ------------- 1 profit B 7500 2 Market_Share_P NU 100 100 45 3 Market_Share_Q NU 50 50 60 17 A B 2000 2400 18 B B 3000 4800 19 C B 1750 2400 20 D B 1750 2400 No. Column name St Activity Lower bound Upper bound Marginal ------ ------------ -- ------------- ------------- ------------- ------------- 1 P B 100 0 2 Q B 50 0 3 R1 B 100 0 4 R2 B 150 0 5 R3 B 50 0 6 DetaL B 100 0 38 / 45
  • 39. Голдратт: Демпинг в Японии по продукту P. . . . Продажа 100 Р дает 4500 долларов на домашнем рынке, но это требует 1500 минут А. 50 изделий Q на домашнем рынке дадут дополнительные 3000 дохода, и потребуют взамен 5000 минут ресурса А. Это оставляет нам излишек в 400 минут «свободных» минут ресурса А... Давайте "подэмпингуем"в Японии. Сколько Р мы можем произвести на ресурсе А за 400 минут? Около 26 штук. Генерация дохода уже не 45 долларов потому, что мы продаем в Японии. А только $72 - $45 = 27 долларов дохода. Поэтому продажи в Японии дадут нам дополнительные 700 долларов генерации дохода. Стоит ли беспокоиться из-за такого ничтожного количества. Давайте посчитаем. Итоговая генерация теперь $8200. Минус $6400 операционных расходов, минус $300 исходной чистой прибыли, дает изменение чистой прибыли до $1500 в неделю. 39 / 45
  • 40. ЛП: Демпинг в Японии по продукту P. Objective: profit = 1820 (MAXimum) No. Row name St Activity Lower bound Upper bound Marginal ------ ------------ -- ------------- ------------- ------------- ------------- 1 profit B 8220 2 Market_Share_P NU 100 100 18 3 Market_Share_Q NU 50 50 42 17 A NU 2400 2400 1.8 18 B B 3400 4800 19 C B 2150 2400 20 D B 2150 2400 No. Column name St Activity Lower bound Upper bound Marginal ------ ------------ -- ------------- ------------- ------------- ------------- 1 P B 100 0 2 Pjap B 26.6667 0 3 Q B 50 0 4 R1 B 126.667 0 5 R2 B 176.667 0 6 R3 B 50 0 7 DetaL B 126.667 0 Упс! Лишних $20! Это мы забыли ограничения целочисленности продуктов. Добавим их! 40 / 45
  • 41. ЦЛП: Демпинг в Японии по продукту P. Теперь все корректно, и мы обогнали Голдратта на $2! Objective: profit = 1802 (MAXimum) No. Row name Activity Lower bound Upper bound ------ ------------ ------------- ------------- ------------- 1 profit 8202 2 Market_Share_P 100 100 3 Market_Share_Q 50 50 17 A 2390 2400 18 B 3390 4800 19 C 2140 2400 20 D 2140 2400 No. Column name Activity Lower bound Upper bound ------ ------------ ------------- ------------- ------------- 1 P * 100 0 2 Pjap * 26 0 3 Q * 50 0 4 R1 126 0 5 R2 176 0 6 R3 50 0 7 DetaL 126 0 41 / 45
  • 42. Голдратт: Демпинг в Японии по продукту Q. . . . Давайте попробуем подемпинговать в Японии продуктом Q. Давайте потратим дополнительные 400 минут ресурса А на производство Q. Мы сможем произвести 40 единиц, поскольку этот продукт требует только 10 минут ограничивающего ресурса. Генерация дохода на каждом Q проданном в Японии составляет $80 минус $40 за материалы, получается $40. Значит продажа Q в Японии дает дополнительные 1600$ чистой прибыли, вместо $700 полученных с Р. Это увеличение чистой прибыли на $900. Мы уже спешим в Японию, почему бы не продавать этот выгодный продукт? ИНЕРЦИЯ! Понимаем ли мы значение этого термина? Неужели мы полностью осознаем эти разрушительные риски. Ответ до сих пор НЕТ. С чего это мы вдруг решили, что должны сначала вложиться в продажу на домашних рынках, и только потом экспортировать? Потому, что в нашей картине до этого не было экспорта. ИНЕРЦИЯ! ВОЗВРАЩАЕМСЯ К ШАГУ 1, НО НЕ ДОПУСКАЙТЕ ИНЕРЦИИ. 42 / 45
  • 43. ЛП: Демпинг в Японии по продукту Q. Оп-па! Мы обогнали Голдратта на $300! Он не учел, что можно сбросить не только производство P для Японии, но и P для исходного рынка! Борясь с «инерцией мышления» он сам по инерции попал в ловушку (ограничил продажи P в Японии 40 единицами). Objective: profit = 3000 (MAXimum) No. Row name St Activity Lower bound Upper bound Marginal ------ ------------ -- ------------- ------------- ------------- ------------- 1 profit B 9400 2 Market_Share_P B 80 100 3 Market_Share_Q NU 50 50 20 17 A NU 2400 2400 2.5 18 B NU 4800 4800 0.5 19 C B 1800 2400 20 D B 1800 2400 No. Column name St Activity Lower bound Upper bound Marginal ------ ------------ -- ------------- ------------- ------------- ------------- 1 P B 80 0 2 Pjap NL 0 0 -18 3 Q B 50 0 4 Qjap B 70 0 5 R1 B 80 0 6 R2 B 200 0 7 R3 B 120 0 8 DetaL B 80 0 43 / 45
  • 44. ЛП: Учтем «оговорку-ограничение» по Qjap. Проверим — да, если мы введем в нашу модель неявное ограничение Голдратта, что в Японии не продать больше, чем 40 единиц P, мы получим в точности его результат. Objective: profit = 2700 (MAXimum) No. Row name St Activity Lower bound Upper bound Marginal ------ ------------ -- ------------- ------------- ------------- ------------- 1 profit B 9100 2 Market_Share_P NU 100 100 18 3 Market_Share_Q NU 50 50 42 4 Market_Share_Qjap NU 40 40 22 18 A NU 2400 2400 1.8 19 B B 4200 4800 20 C B 1950 2400 21 D B 1950 2400 No. Column name St Activity Lower bound Upper bound Marginal ------ ------------ -- ------------- ------------- ------------- ------------- 1 P B 100 0 2 Pjap B 0 0 3 Q B 50 0 4 Qjap B 40 0 5 R1 B 100 0 6 R2 B 190 0 7 R3 B 90 0 8 DetaL B 100 0 44 / 45
  • 45. Выводы Человек не рожден для вычислений. Рассуждения в литературной форме из-за аббераций восприятия легко уводят от оптимума. Поиск оптимума в виде рассуждений трудно верифицировать. Если есть возможность — составьте математическую модель. Человеку ее легко верифицировать. А машине — легко4 найти решение. Глобальных всем оптимумов! 4 Мы опускаем тут вопрос сложности решения задач ЦЛП 45 / 45