Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
msepmenj (2) / Практические занятия / Методы оптимизации управления и принятия решений.pdf
Скачиваний:
201
Добавлен:
12.02.2015
Размер:
6.63 Mб
Скачать

либо на склады. В ограничениях укажем, что H26:H30=0. Для перевозок со складов к клиентам потребуем просто, чтобы I40:I42 равнялись I34:I36.

В ячейках I7, E23 и I37 мы по прежнему считаем стоимости перевозок в отдельных частях. Но в качестве целевой функции мы выберем сумму этих трех величин (ячейка G18).

Так как мы собираемся выбирать оптимальные перевозки среди всех маршрутов на всех участках, то переменными задачи будут все три прежние таблицы переменных: B10:H14, B26:D30 и B40:H42. Напомним, что для указания в качестве переменных разрозненных ячеек или диапазонов ячеек нужно при выделении удерживать нажатой клавишу Ctrl.

Итак, задача для Поиска решения поставлена. Проверьте, что у вас указаны все пять групповых ограничений и в Параметрах отмечено, что задача линейная, а переменные неотрицательны. Если все сделано верно, Поиск решения сможет найти оптимальное решение.

Чтобы не вставлять в книгу еще одну громоздкую таблицу, мы его целиком приводить не будем. Отметим только результаты минимизации в отношении стоимости перевозок. В отличие от оптимизации по частям стоимость перевозок составила 47025 единиц. Сокращение издержек произошло за счет лучшего плана перевозок с заводов.

Следует отметить, что авторы и сами понимают, что решать задачу для всех трех участков вместе, вообще говоря, не требовалось. Ведь изменение плана перевозок с заводов на склады и к клиентам не могло ничего изменить в плане перевозок со складов к клиентам. Тем не менее, мы привели это полное решение, для того, чтобы продемонстрировать работоспособность метода решения даже и в такой, странной на первый взгляд, постановке.

2.П-6. Две бригады

Для выполнения срочного заказа мастер должен набрать из 14 рабочих (Р1, Р2...Р14) бригаду в 5 человек.

Среднее время, которое каждый из 14 рабочих тратит на ту или иную операцию (О1, О2,...О5), требующуюся для выполнения заказа, дано в таблице. Размер заказа равен 100 единицам, так что в реальности каждая операция будет выполнена 100 раз.

Время, минут

O1

O2

O3

O4

O5

P1

67

55

51

63

49

P2

61

77

52

72

66

P3

63

73

72

42

58

P4

52

44

72

50

55

P5

53

76

63

45

47

P6

70

55

77

46

67

P7

43

61

75

54

75

P8

69

70

55

47

61

P9

71

56

67

42

45

P10

68

63

77

61

69

P11

54

59

51

66

56

Зайцев М.Г., Варюхин С.Е.

 

 

 

 

 

 

 

195

 

P12

 

 

57

 

53

 

61

 

62

 

59

 

 

 

 

 

 

 

 

 

 

P13

 

 

73

 

64

 

46

 

72

 

60

 

 

 

P14

 

 

70

 

65

 

78

 

45

 

49

 

 

Определите оптимальное распределение рабочих по операциям. Рассчитайте количество рабочего времени, требующегося на выполнение заказа. Можно ли при этом выполнить заказ за 10 рабочих дней? (Считайте, что рабочая смена равна 8 часам.)

Помогите мастеру набрать запасную бригаду из 5 человек, на случай, если заказ будет удвоен, а время на выполнение останется практически прежним. Представьте списки бригад. Рассчитайте количество рабочего времени, требующегося на выполнение удвоенного заказа в сложившихся обстоятельствах.

Что следует сделать, чтобы набрать две как можно более равные по силам бригады? Представьте списки новых бригад.

Решение задачи.

Так как каждый рабочий должен быть назначен только на одну операцию, то мы имеем дело с задачей о назначениях. В этой ситуации мы сразу можем определить, что задача не сбалансирована, так как операций 5, а рабочих 14. В условиях нехватки операций для назначения остальных рабочих мы можем сбалансировать задачу, введя фиктивные дополнительные операции. Чтобы сэкономить переменные задачи введем только одну фиктивную операцию и назовем ее «Другие работы». На эту операцию назначим 9 рабочих (14-5) оставшихся в стороне от заказа.

Для решения задачи построим обычную таблицу, которая для всех транспортных задач и задач о назначениях выглядит практически одинаково (Рис. 87).

 

A

B

C

D

E

F

G

H

 

I

1

 

O1

O2

O3

O4

O5

Другие

 

 

 

 

 

 

 

 

 

работы Рабочее время

 

 

2

P1

67

55

51

63

49

0

=СУММПРОИЗВ(B2:G2;B18:G18)

3

P2

61

77

52

72

66

0

=СУММПРОИЗВ(B3:G3;B19:G19)

4

P3

63

73

72

42

58

0

=СУММПРОИЗВ(B4:G4;B20:G20)

5

P4

52

44

72

50

55

0

=СУММПРОИЗВ(B5:G5;B21:G21)

6

P5

53

76

63

45

47

0

=СУММПРОИЗВ(B6:G6;B22:G22)

7

P6

70

55

77

46

67

0

=СУММПРОИЗВ(B7:G7;B23:G23)

8

P7

43

61

75

54

75

0

=СУММПРОИЗВ(B8:G8;B24:G24)

9

P8

69

70

55

47

61

0

=СУММПРОИЗВ(B9:G9;B25:G25)

10

P9

71

56

67

42

45

0

=СУММПРОИЗВ(B10:G10;B26:G26)

11

P10

68

63

77

61

69

0

=СУММПРОИЗВ(B11:G11;B27:G27)

12

P11

54

59

51

66

56

0

=СУММПРОИЗВ(B12:G12;B28:G28)

13

P12

57

53

61

62

59

0

=СУММПРОИЗВ(B13:G13;B29:G29)

14

P13

73

64

46

72

60

0

=СУММПРОИЗВ(B14:G14;B30:G30)

15

P14

70

65

78

45

49

0

=СУММПРОИЗВ(B15:G15;B31:G31)

16

 

 

 

 

 

 

 

=СУММ(H2:H15)

 

 

17

 

O1

O2

O3

O4

O5

Д.р.

 

Раб. дней

18

P1

 

 

 

 

 

 

=СУММ(B18:G18)

=H2*100/60/8

19

P2

 

 

 

 

 

 

=СУММ(B19:G19)

=H3*100/60/8

20

P3

 

 

 

 

 

 

=СУММ(B20:G20)

=H4*100/60/8

21

P4

 

 

 

 

 

 

=СУММ(B21:G21)

=H5*100/60/8

22

P5

 

 

 

 

 

 

=СУММ(B22:G22)

=H6*100/60/8

23

P6

 

 

 

 

 

 

=СУММ(B23:G23)

=H7*100/60/8

24

P7

 

 

 

 

 

 

=СУММ(B24:G24)

=H8*100/60/8

25

P8

 

 

 

 

 

 

=СУММ(B25:G25)

=H9*100/60/8

26

P9

 

 

 

 

 

 

=СУММ(B26:G26)

=H10*100/60/8

27P10 =СУММ(B27:G27) =H11*100/60/8

28P11 =СУММ(B28:G28) =H12*100/60/8

29P12 =СУММ(B29:G29) =H13*100/60/8

30P13 =СУММ(B30:G30) =H14*100/60/8

31P14 =СУММ(B31:G31) =H15*100/60/8

32

=СУМ=СУМ =СУМ =СУМ=СУМ =СУММ(G18:G31)-G33

=МАКС(J2:J15)

33

1

1

1

1

1

9

 

34

 

 

 

 

 

 

 

35

=H16*100/60

<-Всего рабочих часов

 

Рис. 87

Взадаче имеется 84 переменных (14*6), отвечающих всем возможным назначениям. Время выполнения фиктивной операции задаем равным нулю.

Вячейках H2:H15 рассчитываем время выполнения одной назначенной операции каждым рабочим и в ячейке H16 суммируем все это рабочее время. Таким образом в ячейке H16 содержится целевая функция задачи.

Для ответов на вопросы задачи нам нужно также подсчитать требующееся рабочее время с учетом того, что все операции нужно выполнить 100 раз. В ячейке A35 запишем формулу для полного рабочего времени в часах =H16*100/60. А в ячейках I18:I31 подсчитаем, сколько смен должен проработать каждый рабочий.

Разумеется, может оказаться, что количество смен получится различным. В этих условиях длительность выполнения заказа определится максимальным из этих времен. Для определения максимального времени используем функцию

=МАКС(J2:J15).

Зайцев М.Г., Варюхин С.Е.

197

Чтобы поставить задачу Поиску решения нужно еще сделать расчеты количеств назначений для рабочих и операций. Для контроля числа назначенных на каждую операцию рабочих введем в ячейку G32 формулу =СУММ(G18:G31)- G33, которую затем протянем влево. «Заказанное» количество рабочих указано в строке B33:G33. Для контроля числа назначений для каждого из рабочих, введем в ячейку H18 формулу =СУММ(B18:G18), которую следует затем протянуть вниз. Теперь можно ставить задачу Поиску решения.

Итак, целевая ячейка H16, цель – поиск минимума затрат рабочего времени. Переменные задачи B18:G31. Во вкладке Параметры отмечаем, что задача линейная, а переменные неотрицательны. И в списке ограничений вводим условия: B32:G32=0 и H18:H31=1, обычные для задач о назначениях.

В результате оптимизации получаем следующий план назначений (Рис. 88)

 

O1

O2

O3

O4

O5

Д. р.

220

Раб. дней

 

 

P3

0

0

0

1

0

0

1

8.75

P4

0

1

0

0

0

0

1

9.17

P7

1

0

0

0

0

0

1

8.96

P9

0

0

0

0

1

0

1

9.38

P13

0

0

1

0

0

0

1

9.58

 

0

0

0

0

0

0

 

9.58

 

1

1

1

1

1

9

 

 

 

 

 

 

<-Всего рабочих

 

 

 

366.7

 

 

часов

 

 

 

 

Рис. 88

Мы оставили в итоговой таблице только рабочих, назначенных в бригаду. Все прочие назначены на другие работы.

В этом оптимальном плане общие трудозатраты составят 366.7 часов рабочего времени. Напомним, что мы минимизировали не время выполнения заказа (что может быть интересно заказчику), а затраты рабочего времени в человеко-часах (что интересно производителю работ).

При этом на одну единицу в заказе будет израсходовано 220 минут рабочего времени, а длительность исполнения заказа составит 9.58 смены, т.е. чуть меньше 10 рабочих дней.

Для набора двух бригад вместо одной можно действовать двумя способами.

Первый способ соответствует логике задачи – раз одна бригада набрана, давайте вычеркнем этих рабочих из списка. Т.е. нам нужно скопировать лист и удалить строки, соответствующие рабочим P3, P4, P7, P9 и P13 из обеих частей таблицы, верхней и нижней. Только не забудьте проверить, что все формулы остались правильными. Кроме этого нужно изменить количество лишних рабочих в ячейке G33 с 9 до 4. После новой оптимизации получим второй план назначений

(Рис. 89).

 

O1

O2

O3

O4

O5

Д. р.

250

Раб. дней

 

 

P1

0

0

1

0

0

0

1

10.63

P5

0

0

0

0

1

0

1

9.79

P11

1

0

0

0

0

0

1

11.25

P12

0

1

0

0

0

0

1

11.04

P14

0

0

0

1

0

0

1

9.38

 

0

0

0

0

0

0

 

11.25

 

1

1

1

1

1

4

 

 

 

416.7

 

 

<-Всего рабочих часов

 

Рис. 89

В таблице снова оставлены только назначенные во вторую бригаду рабочие.

Как вы можете видеть, теперь максимальная длительность работ составила бы чуть больше 11 дней, а трудозатраты увеличились до 417 часов. Левые колонки в таблицах 2.7 и 2.8 содержат списки двух составленных бригад.

Если заказ действительно будет удвоен, то реальный срок выполнения составит 12 дней, вместо 10, а трудозатраты возрастут до 783.4 часа.

Второй способ решения можно получить, если воспользоваться простыми соображениями. Что в реальности получится после набора второй бригады? Очевидно, на каждую операцию будет назначено по два человека, а не по одному. А так как первая бригада – лучшая, то рабочие первой бригады обязательно будут при этом выбраны. Поэтому, если в строке заказов B33:G33 вместо единиц проставить двойки, а вместо 9 оставить 4, то мы отберем лучших 10 человек, среди которых будут 5 рабочих первой бригады, а остальные 5 составят вторую бригаду.

Этот второй способ проще первого, так как никаких изменений в формулах не требуется и после коррекции заказов можно сразу запускать Поиск решения на выполнение. Мы не будем приводить итоговую таблицу, так как она полностью повторяет предыдущее решение, кроме того, что для трудозатрат сразу будет получено число (470 минут), соответствующее удвоенному заказу.

Вопрос о равных бригадах оказывается более сложным. Фактически он соответствует решению дополнительной задачи линейного программирования. Мы предлагаем воспользоваться уже полученными списками бригад и оставляем на долю читателя попытку решить задачу о равных бригадах с нуля и в одной задаче.

Так как мы отобрали лучших рабочих, очевидно, было бы разумно составлять две равные бригады именно из них. Конечно, может быть из всех рабочих можно выбрать две совершенно равные бригады. Но при этом, время исполнения заказа и использованное рабочее время в целом могут сильно увеличиться, что нежелательно по смыслу задачи.

Поэтому наша задача состоит в разбиении 10 выбранных рабочих на две бригады. В таблице 2.9 показан пример организации данных для решения задачи.

 

 

 

Зайцев М.Г., Варюхин С.Е.

 

 

199

 

 

 

 

 

 

 

 

 

 

 

 

A

B

C

D

E

F

G

I

J

 

 

 

 

1-я

 

2-я

=СУММ(F2:F6)

=СУММ(G2:

 

 

 

 

 

 

бри-

 

бри-

 

G6)

 

 

 

 

 

 

гада

 

гада

 

 

 

 

 

 

1

P3

43

P1

54

=C2*C9+E2*E9

=E2+C2-F2

=F2*100/60/8

=G2*100/60/8

 

 

2

P4

44

P5

53

=C3*C10+E3*E10

=E3+C3-F3

=F3*100/60/8

=G3*100/60/8

 

 

3

P7

46

P11

51

=C4*C11+E4*E11

=E4+C4-F4

=F4*100/60/8

=G4*100/60/8

 

 

4

P9

42

P12

45

=C5*C12+E5*E12

=E5+C5-F5

=F5*100/60/8

=G5*100/60/8

 

 

5

P13

45

P14

47

=C6*C13+E6*E13

=E6+C6-F6

=F6*100/60/8

=G6*100/60/8

 

 

 

 

220

 

250

=F1-G1

 

 

 

 

 

 

Войдут

в первую бригаду

 

 

 

 

 

 

1

P3

 

P1

=1-C9

 

 

 

 

 

 

2

P4

 

P5

=1-C10

 

 

 

 

 

 

3

P7

 

P11

=1-C11

 

 

 

 

 

 

4

P9

 

P12

=1-C12

 

 

 

 

 

 

5

P13

 

P14

=1-C13

 

 

 

 

 

Рис. 90

Вобласти A1:D7 приведены списки бригад, выбранные нами ранее. Указаны времена выполнения операций с 1-ой по 5-ю соответствующими рабочими первой и второй бригады. Введем переменные C9:C13, которые показывают, кто из рабочих старой первой бригады войдет в первую новую бригаду. Так как для каждой операции выбор рабочих делается из двух человек, то если рабочий старой первой бригады выбран в новую первую бригаду, значит рабочий старой второй бригады в нее выбран не будет. Например, если выбрать рабочего P3, то не будет выбран рабочий P1 и наоборот. Поэтому формулы в столбце E9:E13 вычисляют, кто из рабочих старой второй бригады будет выбран в новую первую бригаду. Для этого переменные C9:C13 должны быть двоичными, разумеется.

Если список новой первой бригады в столбцах C9:C13 и E9:E13 составлен, то можно вычислить время выполнения каждой из операций рабочими новой первой бригады. Это сделано в столбце F2:F6. Формула суммы в ячейке F1 в этом случае подсчитает время однократного исполнения всех операций первой бригадой. Аналогичные расчеты для второй бригады проведены в столбце G1:G6.

Теперь вся проблема в определении целевой функции.

Вобщем, мы можем действовать двумя способами. Первый способ предполагает, что мы хотим все заботы о поиске подходящего решения возложить на компьютер. В этом случае нам нужно так построить целевую функцию, чтобы получить нужное решение сразу после завершения процедуры оптимизации. Второй способ оставляет определенные действия и на нашу долю.

Так как мы хотим добиться наименьшей разницы во времени выполнения заказа двумя бригадами, подсчитаем в ячейке F7 эту самую разницу: =F1-G1. Можно ли выбрать полученное выражение в качестве целевой функции? Давайте попробуем. Надо только решить, какую выбрать цель.

Можем ли мы потребовать, чтобы F7 была минимально возможной? Очевидно, нет. Ведь если значение ячейки F1 будет меньше, чем значение ячейки G1, то целевая функция станет отрицательной. А наименьшее значение целевой функции будет достигнуто при наибольшей разнице во временах выполнения. Причем, такое решение у нас уже есть, если хорошенько подумать.

Можно попросить, чтобы значение целевой ячейки равнялось заданному числу (третий выбор цели оптимизации). Что тут плохо, так это то, что мы не

знаем, какое число выбрать. Если выбрать 0, то есть ли вообще такое решение? Попробуем.

Итак: цель – равенство 0, переменные C9:C13, ограничение – переменные = двоичные, параметры – линейная задача. Запускаем поиск, получаем ответ, что поиск не может найти подходящего решения. Значит придется пробовать несколько разных значений до тех пор, пока мы не набредем на нужное значение.

Пробовать в качестве цели нечетные числа, и в частности единицу, очевидно не стоит, так как сумма двух времен четное число (220+250=470), а разница между временами бригад в этом случае может быть только четной.

Новая цель – целевая функция равна 2. Запускаем поиск – оп, решение найдено! Времена выполнения 236 и 234 минуты для первой и второй бригады соответственно. Не так уж много и работы понадобилось. Что еще хорошо в этом подходе, что можно подбирать любую разницу по заданному значению, а не только минимальную. Иногда это оказывается очень полезным. Например, в случае, если вы хотите получить несколько решений, близких к оптимальному решению.

Но, все таки, что там насчет первого способа? Чтобы сразу искать нужное решение?

На самом деле и это не сложно. У нас ведь была одна проблема, что целевая функция могла быть отрицательной. Так давайте потребуем, чтобы поиск минимума велся только среди неотрицательных значений целевой функции! Добавляем ограничение – F7>=0, и спокойно ищем минимум целевой функции. Приведем и полученное решение, то же самое, что и при поиске заданной разницы, конечно (Рис. 91).

 

 

1-я

 

2-я

 

 

 

Время

Время

 

 

 

 

 

 

работы

работы

 

 

бри-

 

бри-

 

 

 

 

 

 

 

 

 

рабочих

рабочих

 

 

гада

 

гада

 

 

 

 

 

 

236

234

 

1-ой бр.

2-ой бр.

1

P3

43

P1

54

54

43

 

11.3

9.0

2

P4

44

P5

53

44

53

 

9.2

11.0

3

P7

46

P11

51

51

46

 

10.6

9.6

4

P9

42

P12

45

42

45

 

8.8

9.4

5

P13

45

P14

47

45

47

 

9.4

9.8

 

 

220

 

250

2

 

 

 

 

 

Войдут в первую

 

 

 

 

 

 

бригаду

 

 

 

 

 

 

 

1

P3

0

P1

1

Вторая

 

 

 

 

2

P4

1

P5

0

бригада -

 

 

 

 

3

P7

 

 

 

остальны

 

 

 

 

0

P11

1

е

 

 

 

 

4

P9

1

P12

0

рабочие

 

 

 

 

5

P13

1

P14

0

 

 

 

 

 

Рис. 91

В одну бригаду войдут рабочие P1, P4, P9, P11, P13, а в другую – P3, P5, P7, P9, P14. Следует заметить, что наши попытки выровнять бригады привели к тому, что время выполнения заказа увеличилось до 11 суток.