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

Обратите внимание, что если после получения резюме Поиска решения о том, что решение не найдено, нажать кнопку OK, на листе с задачей сохранится НЕ решение, а просто итог поиска. Состояние задачи, на котором надстройка пришла к заключению, что решения не существует. Например такой (Рис. 76).

 

A

B

C

D

E

F

G

H

I

1

 

Аня

Маша

Катя

Лиза

Ольга

Софья

 

 

2

Иван

3

4

9

18

9

6

1

3.75

3

Михаил

16

8

12

13

20

4

1

5

4

Павел

8

6

13

1

6

9

1

1

5

Николай

16

9

6

8

1

11

1

3.25

6

Алексей

8

12

17

5

3

5

1

5

7

Петр

2

9

1

10

5

17

1

1.45

8

 

1

1

1

1

1

1

 

19.45

9

 

 

 

 

 

 

 

 

 

10

 

Аня

Маша

Катя

Лиза

Ольга

Софья

 

 

11

Иван

0.25

0.75

0

0

0

0

1

 

12

Михаил

0

0.25

0

0

0

0.75

1

 

13

Павел

0

2E-15

0

1

0

0

1

 

14

Николай

0

0

0.45

0

0.55

0

1

 

15

Алексей

0.3

0

0

0

0.45

0.25

1

 

16

Петр

0.45

0

0.55

0

0

0

1

 

17

 

1

1

1

1

1

1

 

 

Рис. 76

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

В случае, если не выполнены несколько условий, по такой итоговой таблице обычно мало что удается понять.

Еще одно замечание. Иногда задание дополнительного ограничения на индексы команд или другие соответствующие им величины в транспортных задачах и задачах о назначениях не приводят к появлению дробных назначений. Значит ли это, что был использован транспортный алгоритм?

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

2.П-4. Распределение аудиторов по фирмам

Менеджер - координатор аудиторской фирмы должен распределить аудиторов для работы на следующий месяц. Аудиторы различаются по квалификации и опыту работы. Прежде чем приступить к аудиту конкретной фирмы они должны затратить определенное время на подготовку и консультации. В данный момент имеются заявки от 10 клиентов. Менеджер – координатор, учитывая опыт работ аудиторов каждой конторы, оценил время, необходимое «среднему» аудитора каждой конторы для подготовки к аудиту конкретного клиента. Результаты представлены в таблице.

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

183

Конторы

 

 

 

 

Клиенты

 

 

 

 

Число

1

2

3

4

5

6

7

8

9

10

сотруд

 

ников

Гаапвилл

8

21

15

13

9

17

18

7

26

9

35

Финанстаун

14

18

17

19

12

6

 

15

24

13

20

Исабург

9

15

18

16

16

15

11

13

21

19

25

Нью-Баланс

11

 

14

7

23

9

6

18

 

7

10

Заявки

4

9

2

12

7

6

9

3

18

5

 

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

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

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

Вданном случае мы имеем дело с транспортной задачей, так как аудиторы из одной конторы могут быть назначены разным клиентам одновременно, т.е. мы не ищем только соответствия контора - клиент. Следовательно, в задаче требуется найти, сколько аудиторов из Гаапвила будет назначено 1-му, 2-му. 3-ему, … 10-му клиентам, сколько аудиторов из Финанстауна будет назначено 1-му, 2-му. 3-ему,

10-му клиентам и т.д. для остальных контор. В соответствии с этим в задаче должно быть не менее чем 40 переменных (4 конторы х 10 клиентов). Однако прежде чем строить задачу необходимо убедиться, что задача сбалансирована.

Считаем общее число аудиторов в конторах – 90 человек. Считаем общее число аудиторов в заявках – 75 человек. Т.о. необходимого баланса нет. Так как аудиторов больше, чем упомянуто в заявках клиентов, то нам недостает клиентов, которые заказали бы оставшихся 15 аудиторов. Так как нам выгодно стремиться к меньшему количеству переменных, введем одного дополнительного фиктивного клиента под именем «не использованы» и в качестве заказа укажем ему оставшихся 15 аудиторов. При этом будем иметь ввиду, что все аудиторы, назначенные данному клиенту в действительности останутся не занятыми. Этот фиктивный клиент нужен только для приведения задачи к стандартному транспортному виду.

Вкачестве примера организации данных на листе Excel можно предложить следующую таблицу (Рис. 77).

 

A

B

 

C

D

 

E

 

F

 

G

 

H

 

I

 

J

 

K

L

M

1

Конторы

Клиенты

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Не

Число

2

 

1

 

2

3

 

4

 

5

 

6

7

 

8

 

9

10

исп сотрудников

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

3

Гаапвилл

8

 

21

15

 

13

 

9

 

17

18

 

7

 

26

9

 

35

 

Финанста

14

 

18

17

 

19

 

12

 

6

 

99

 

15

 

24

13

 

20

4

ун

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

Исабург

9

 

15

18

 

16

 

16

 

15

 

11

 

13

 

21

19

 

25

 

Нью-

11

 

99

14

 

7

 

23

 

9

6

 

18

 

99

7

 

10

6

Баланс

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Заявки

4

 

9

2

 

12

 

7

 

6

9

 

3

 

18

5

15

=СУММПРОИЗ

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В(

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

B3:L6;B11:L14)

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

Конторы

Клиенты

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Не

Число

10

 

1

2

3

4

5

6

7

8

9

10

исп сотрудников

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

11

Гаапвилл

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=СУММ(B11:L1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1)-M3

 

Финанста

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-20

12ун

13Исабург -25

 

Нью-

-10

14

Баланс

 

15

Заявки

=СУММ(B11:B14)- -6 -9 -3 -18 -5 -15

 

B7

Рис. 77

Обратите внимание на изменение исходной таблицы временных затрат на подготовку к аудиту.

Во-первых, временные затраты для добавочного фиктивного клиента не заданы вообще. Правильно ли это? На самом деле, так как в Excel пустые ячейки при вычислениях полагаются содержащими 0, временные затраты заданы и равны 0. Можно ли задать какое-либо другое значение в этих ячейках? Вообще-то можно, результаты минимизации при этом не изменятся. Однако какое число вы могли бы подставить вместо нулей? Видимо, любое произвольное число. Но, так как часть аудиторов будет неизбежно назначена этому фиктивному клиенту, заданное вами произвольное число войдет в целевую функцию, являющуюся суммарными временными затратами всех аудиторов! Таким образом целевая функция будет показывать не реальные временные затраты, а некий индекс. Его, разумеется, можно пересчитать к реальным временным затратам, вычтя из него 15 умноженное на заданное вами произвольное число. А это, в свою очередь, эквивалентно тому, что вы сразу зададите в качестве временных затрат для фиктивного клиента нулевые значения.

Заметьте еще, что если бы вы задали в качестве временных затрат для фиктивного клиента не равные величины, то и результаты минимизации могли бы оказаться неправильными. Это могло случиться, если бы введенные вами временные затраты были в том же диапазоне, что и имеющиеся в исходной таблице данные, т.е. от 6 до 26.

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

185

Во-вторых, в пустых ячейках проставлено число 99. Эти изменения связаны с необходимостью запретить назначения аудиторов из Финанстауна седьмому клиенту и аудиторов из Нью-Баланс – второму и девятому клиентам. Здесь уместно напомнить, что в транспортной задаче не должно быть лишних ограничений. По существу их всего два – все заказы должны быть в точности исполнены и все аудиторы должны быть распределены по клиентам. Поэтому писать в ограничениях Поиска решения что-то вроде переменная C14=0 не следует. Нужно просто задать в таблице такое произвольное значение времени подготовки, чтобы Поиск решения сам отказался от нежелательных для вас назначений. Так как мы будем искать минимум временных затрат, то следует, очевидно, записать в пустых ячейках какие-либо числа, гораздо большие самого большого числа в таблице. Мы уже находили это число (26), следовательно, можно эффективно запретить назначения, записав в пустые ячейки 100, или 1000, или 10000 и т.д. Мы проставили число 99 исключительно с целью уменьшить ширину таблицы для данной книги.

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

А теперь задумайтесь, почему мы в данном случае недрогнувшей рукой вписали в пустые ячейки число, взятое с потолка, в то время как немногим раньше убеждали вас, что писать что-либо отличное от нуля в пустые ячейки временных затрат для фиктивного клиента не следует ни в коем случае?

Конечно, это именно потому, что соответствующие назначения в случае с запретами не будут сделаны! А раз переменные в таблице снизу C14, H12 и J14 останутся равными 0, то на какое бы число мы их не умножали при расчете суммарных затрат, результата они не изменят.

В-третьих, в строку заказов B7:K7 мы добавили число 15 в ячейке L7 – фиктивный заказ добавленного клиента.

С учетом этих изменений количество переменных достигло 44 (B11:L14). Чтобы рассчитать реальные издержки времени на подготовку для всех контор в сумме запишем в ячейку M7 формулу =СУММПРОИЗВ(B3:L6;B11:L14).

Это и будет целевая функция задачи.

Теперь нужно задать стандартные ограничения транспортных задач. Для этого сделаем расчеты – сколько же всего аудиторов назначено каждому клиенту и сколько аудиторов каждой конторы распределено.

Если записать в ячейку B15 формулу =СУММ(B11:B14)-B7, то мы подсчитаем разницу между заказом первого клиента (B7) и числом назначенных ему аудиторов. Эта разница, в случае правильного решения задачи, должна быть равной нулю. Протянем формулу вправо, на оставшихся 10 клиентов (включая фиктивного). Аналогичную формулу используем для контроля использования аудиторов контор. Запишем в ячейку M11 формулу =СУММ(B11:L11)-M3 и протянем ее вниз. В постановке задачи для Поиска решения мы должны будем потребовать, чтобы ячейки B15:L15=0 и M11:M14=0.

Почему в данном случае мы предлагаем сравнивать разницу между заказом и назначением с нулем, а не просто сравнивать заказы и назначения? Конечно, не потому, что имеется какая-либо разница в результате решения. Эти изменения связаны с тем, что для контроля правильности решения, которое будет получено, неплохо будет и визуально проверить результаты. А в этом случае значительно проще сравнивать все получаемые числа с нулем, чем друг с другом. Если мы ожидаем, что при правильном решении получатся нули, то сможем сразу увидеть,

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

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

После запуска Поиска решения на выполнение получаем следующее решение (Рис. 78).

Конторы

Клиенты

 

 

 

 

 

 

 

 

Не

Число

 

1

2

3

4

5

6

7

8

9

10

исп.

сотрудников

Гаапвилл

8

21

15

13

9

17

18

7

26

9

 

35

Финанста

14

18

17

19

12

6

99

15

24

13

 

20

ун

 

 

 

 

 

 

 

 

 

 

 

 

Исабург

9

15

18

16

16

15

11

13

21

19

 

25

Нью-

11

99

14

7

23

9

6

18

99

7

 

10

Баланс

 

 

 

 

 

 

 

 

 

 

 

 

Заявки

4

9

2

12

7

6

9

3

18

5

15

950

 

 

 

 

 

 

 

 

 

 

 

 

 

Конторы

Клиенты

 

 

 

 

 

 

 

 

Не

Число

 

1

2

3

4

5

6

7

8

9

10

исп.

сотрудников

Гаапвилл

4

0

2

11

7

0

0

3

0

5

3

0

Финанста

 

 

 

 

 

 

 

 

 

 

 

 

ун

0

2

0

0

0

6

0

0

0

0

12

0

Исабург

0

7

0

0

0

0

0

0

18

0

0

0

Нью-

 

 

 

 

 

 

 

 

 

 

 

 

Баланс

0

0

0

1

0

0

9

0

0

0

0

0

Заявки

0

0

0

0

0

0

0

0

0

0

0

 

Рис. 78

Как мы видим общие затраты составили 950 рабочих часов. При этом фиктивному заказчику назначены 3 аудитора из конторы Гаапвил и 12 аудиторов из конторы Финанстаун – в реальности эти аудиторы не будут заняты в предстоящий период.

Как мы можем убедиться, запрещения назначений, сделанные нами, так же сработали правильно. При этом аудиторы Гаапвила назначены шести клиентам (1-

му – 4, 3-му – 2, 4-му – 11, 5-му – 7, 8-му – 3 и 10-му – 5), а аудиторы Финанстауна, Исабурга и Нью-Баланса – двум клиентам каждый.

Для всех клиентов, кроме 2-го и 4-го, все назначенные аудиторы принадлежат к одной и той же конторе.

Замечание: если вы при расчете получили в некоторых ячейках своей таблицы вместо нулей числа вроде 3.9E-10, не волнуйтесь. Это число в научной форме записи, есть очень маленькая дробь – 39 деленное на сто миллиардов. Так как программа ищет решение не абсолютно точное, а приближенное, то для нее это число с приемлемой точностью уже не отличается от нуля. Часто можно получить несколько более точный результат, увеличив количество итераций во вкладке Параметры со 100 (по умолчанию) до 10000. Но можно и просто не обращать внимания на эти малые числа. Правильное решение все равно получено.

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

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

187

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

Давайте дублируем лист с таблицей (щелкнуть по ярлыку правой кнопкой мыши, выбрать Переместить/Скопировать, отметить создавать копию, ОК) и изменим формулы в строке B15:L15. Запишем в ячейку B15 формулу =СУММ(B11:B14) и протянем ее вправо. Затем в ячейке B17 запишем формулу для разницы между переменной и заказом в целом =B11-B$15. Эту формулу нужно растянуть так, чтобы охватить все переменные, то есть на область B17:K20. Фиктивного клиента мы здесь пропускаем, так как на него ограничение не распространяется – можно отставить аудиторов только одной фирмы. После этого возвращаемся в Поиск решения и меняем введенное ранее условие B15:L15=0 на B15:L15= B7:L7. Мы снова вернулись к обычному виду этого ограничения для того, чтобы не считать еще раз суммы назначений аудиторов для клиентов.

Теперь добавим новое ограничение, позволяющее назначить каждому клиенту аудиторов не менее чем из двух контор. Судя по всему такое решение существует, какой-нибудь пример подобного решения можно найти и вручную. Однако оптимальное решение найдет нам Поиск решения, после того, как мы потребуем, чтобы все числа в таблице B17:K20 были меньше или равны -1 (ноль соответствует нежелательному назначению всех аудиторов из одной конторы). Приведем часть полученной таблицы, относящуюся к решению (Рис. 79).

Заявки

4

9

2

12

7

6

9

 

3

18

 

5

15

982

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Конторы

Клиенты

 

 

 

 

 

 

 

 

 

 

Не

Число

 

1

2

3

4

5

6

7

 

8

9

 

10

исп.

сотрудников

Гаапвилл

3

0

1

11

6

0

0

 

2

0

 

4

8

-1.1E-08

Финанста

0

3

1

0

1

5

0

 

1

1

 

1

7

7.6E-10

ун

 

 

Исабург

1

6

0

0

0

0

1

 

0

17

 

0

0

9.5E-10

 

 

Нью-

0

0

0

1

0

1

8

 

0

0

 

0

0

3.8E-10

Баланс

 

 

Рис. 79

Как мы видим, общее количество часов, затраченных на подготовку, выросло до 982. При этом во всех случаях аудиторы назначаются из двух контор. Несколько изменились и количества не назначенных аудиторов – теперь из Гаапвила не использованы 8 аудиторов, а из Финанстауна только 7.

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