К постановкам задач

5.П.1. Распределение аудиторов по фирмам

Постановка задачи

Менеджер-координатор аудиторской фирмы должен распределить аудиторов для работы на следующий месяц. Есть заявки от 10 клиентов на 75 аудиторов. В 4 конторах фирмы 90 аудиторов, 15 аудиторов можно отправить на плановую учебу. Аудиторы различаются по квалификации и опыту работы. Прежде чем приступить к аудиту конкретной фирмы, они должны затратить определенное время на подготовку и консультации. Менеджер-координатор, учитывая опыт работы аудиторов каждой конторы, оценил время, необходимое в среднем аудитору каждой конторы для подготовки к аудиту конкретного клиента. Результаты - в таблице. Знаки вопроса в клетках таблицы означают, что аудиторы данной конторы не имеют опыта аудита в отрасли, к которой относится данный клиент, и их не должны к нему посылать. Распределить аудиторов так, чтобы суммарные временные затраты на подготовку были минимальны.
конторы\клиентыК1К2К3К4К5К6К7К8К9К10ресурсы
А1. ГААПвилл821151391718726935
А2. Финанстаун14181719126015241320
А3. ИСАбург915181616151113211925
А4. Нью-Баланс11?147239618?710
Заявки492127693185
В реальной практике обычно требуют, чтобы аудиторы не все были из одной конторы. Попробуйте выполнить это условие и не слишком ухудшить решение.

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

Модель MO5P1

Параметры задачи приведены в таблице в постановке задачи. Мы добавили перед названием конторы ее условное обозначение (А1,...,А4), которое будем использовать в дальнейшем.
Для решения задачи можно использовать следующую модель.
Ресурсы аудиторской фирмы (тип "Приобретение") поступают в Распределение (тип "Производство"), где происходит распределение аудиторов по клиентам. Распределение передается в Заказ (тип "Сбыт").
В Распределении используется по одному процессу на каждое возможное распределение, т.е. создается процесс для каждой пары (контора, клиент). Название процесса образуется соединением обозначения конторы и обозначения клиента, например, А2К5 для пары контора = А2, клиент = К5. Для учебы добавляются процессы вида А1У, А2У,... Это может показаться неудобным и громоздким, но данные по каждой паре все равно куда-то должны вводиться. Если построить модель с меньшим количеством процессов, в ней все равно где-то будет список со всеми парами и соответствующими им данными. Поэтому, эта громоздкость - только кажущаяся, неизбежная. Для каждого процесса задается его цена - издержки из параметров задачи.
При реальной практической работе с полнофункциональной версией GEM все данные извлекались бы из внешней базы данных, а имена процессов создавались бы автоматически. В данном примере мы делаем это вручную.
Для пар, для которых в таблице стоит вопросительный знак, можно было бы не создавать процесс. Но в дальнейшем ситуация может измениться, вместо вопросительного знака появится число. Чтобы не менять модель, процесс создается, но его цена делается очень высокой, настолько, что процесс не может войти в решение. Для дополнительной уверенности для этого процесса можно задать Мах(ед) = 0.

Вставим в модель объект типа "Приобретение" с именем "Ресурсы", объект типа "Производство" с именем "Распределение", объект типа "Сбыт" с именем "Заказ". Проведем связи-потоки из Ресурсов в Распределение и из Распределения в Заказ.
В Ресурсах, в таблице закупок, введем материалы - конторы А1,...,А4. Зададим для них Мах кол-во из параметров задачи.
В Заказ, в таблицу продаж, введем 11 продуктов: клиентов К1,...,К10 и Учебу. Зададим для них Min кол-во = Мах кол-во = заказу из параметров задачи.
В Распределение, в процессах, добавим 44 процесса-пары: АiKj и АiУ, где i=1,...,4, j=1,...,10. Во входящих материалах для каждого из процессов-пар введем материал - начало пары, потребление = 1. В исходящих материалах для каждого процесса введем продукт - конец пары (Для АiУ - Учеба), выход = 1.
Решим модель. Общие затраты = 842.

Зададим условие, что к любому клиенту должны идти аудиторы не менее, чем из двух контор. В Распределение, в исходящие материалы, для каждого процесса добавим один продукт-флаг с тем же именем, что и процесс, с выходом = 1. Этот флаг предназначен, чтобы учитывать процессы распределения. Нам надо, чтобы флаг принимал значение = 1, если процесс выполнялся, и = 0, если не выполнялся. Чтобы это обеспечить, добавим объект типа "Хранение" с именем "Управление" и объект типа "Производство" с именем "Счет". Направим связи из Распределения в Управление и из Управления в Счет. В Управлении, в хранимых материалах, введем 44 материала-флага, для каждого флага зададим Мах запас = 0. Чтобы избавиться от лишних запасов флагов, используем Счет: в процессы введем 44 процесса, по одному на флаг, с тем же именем, что флаг. Для каждого процесса зададим один входной материал - одноименный флаг, с расходом = 1. Т.о., если в Управление поступит какой-либо флаг в количестве > 1, излишки флага будут переданы в Счет, и там уничтожены (одноименным процессом). Мы добились того, что для каждого выполнявшегося процесса будет выставлен в Управлении одноименный флаг в количестве = 1. В выставлении каждого флага участвует одна контора, поставившая входной материал в процесс (начало названия процесса) и один клиент, принявший продукт из процесса (конец названия процесса). Т.о., эти флаги образуют 4 группы по 11 - по числу контор, которые выставляют флаги, и 11 групп по 4 - по числу клиентов, которые эти флаги выставляют. Нам надо, чтобы в каждой из 11 клиентских групп было не менее двух единичных флага. Чтобы это обеспечить, добавим объект типа "Ресурсы" с именем "Учет", направим из него связь в Управление. В Учет, в таблицу ресурсов, введем 11 ресурсов с названиями клиентов. в Управление, в потребление ресурсов остатками, введем все 44 флага, для каждого флага укажем потребление = 1 того ресурса-клиента, который выставляет флаг (конец имени флага). Теперь из Учета потребляется столько каждого ресурса, сколько флагов выставлено в клиентской группе, т.е. столко, сколько контор направило аудиторов этому клиенту. Зададим в Учете, в таблице ресурсов, Min кол-во = 2 для каждого ресурса-клиента. Этим мы обеспечим, что к каждому клиенту попадут аудиторы не менее, чем из двух контор.
Решим модель. Получим временные затраты = 884 (Чистая прибыль = -884). Для удобства просмотра, какая контора какому клиенту скольких аудиторов направила, в модель добавлена панель данных, с которой пользователю предлагается познакомиться самостоятельно.

К постановкам задач