- •ВВЕДЕНИЕ
- •1.3.1. Задача линейного программирования
- •1.3.2. Классическая транспортная задача линейного программирования
- •1.3.3. Транспортная задача по критерию времени
- •1.3.4. Задача параметрического линейного программирования
- •1.3.6. Задача нелинейного программирования
- •1.3.7. Дискретная задача математического программирования
- •1.3.8. Задача целочисленного линейного программирования
- •1.3.10. Задача коммивояжера
- •1.4.2. Задания для самостоятельной работы
- •2. ЗАДАЧА О НАЗНАЧЕНИЯХ
- •3. ЗАДАЧА О КОММИВОЯЖЕРЕ
- •4. ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ
- •4.5.3. Задания для решения задачи о распределении ресурсов
- •4.6.3. Задания для решения задачи о замене оборудования
- •ЗАКЛЮЧЕНИЕ
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК
2.ЗАДАЧА О НАЗНАЧЕНИЯХ
2.1.МАТЕМАТИЧЕСКАЯМОДЕЛЬ ЗАДАЧИОНАЗНАЧЕНИЯХ
Содержательная постановка задачи
Задано известное количество различных работ и такое же число и с- полнителей, каждую из работ может выполнять любой из исполнителей. Известна эффективность при выполнении конкретной работы конкретным исполнителем. Требуется распределить исполнителей по работам, а именно, назначить исполнителя на каждую работу. Каждый исполнитель может выполнять только одну работу. В результате распределения работ должна быть максимизирована суммарная эффективность.
Построение математической модели 1. Определение размерности:
n – количество подлежащих выполнению работ, i = 1,…,n, – индекс (номер) работы;
n – количество исполнителей, j = 1,…, n, – индекс (номер) исполнителя. Следует обратить внимание, что два разных параметра (для работы и для исполнителя) данной моделируемой ситуации имеют одну и ту же
размерность, но разные индексы, что позволяет при построении модели различать эти параметры.
2. Выбор постоянных параметров:
сij – эффективность выполнения работы с номером i, i = 1,…,n,
исполнителем с номером j, j = 1,…,n. 3. Выбор переменных параметров:
для каждой i-й работы (i = 1,…,n) и для каждого j-го исполнителя (j = 1,…,n) введем переменную xij , которая может принимать только два
значения (0 или 1):
1, еслиi-я работа выполняется j-м исполнителем, xij = 0, если иначе.
35
4. Запись условий (ограничений):
n |
x =1, i =1, , n – |
(1) |
∑ |
||
j=1 |
ij |
|
каждая i-я работа выполняется ровно один раз (в i-й строке матрицы переменных xij содержится ровно одна единица, остальные элементы стро-
ки равны нулю);
n |
|
(2) |
∑ x =1, j =1, ,n – |
||
i=1 |
ij |
|
каждый j-й исполнитель выполняет ровно одну работу (в j-м столбце матрицы переменных xij содержится ровно одна единица, остальные элемен-
ты столбца равны нулю);
0 ≤ xij ≤1, i, j =1, , n ,
xij – целочисленные, i, j =1, , n –
условия нахождения каждой переменной xij в интервале от 0 до 1 и целочисленность переменных xij обеспечивают переменным xij альтернатив-
ные значения 0 или 1.
5. Запись критерия моделирования (целевой функции):
n n |
|
x → max – |
(3) |
L = ∑ ∑ c |
|||
i=1 j=1 |
ij |
ij |
|
максимизация суммарной эффективности выполнения всех работ.
36
Таким образом, математическая модель задачи о назначениях является задачей целочисленного линейного программирования. Задачи целочисленного программирования с двумя альтернативными значениями 0
или 1 для переменных называются задачами альтернативного программирования.
Заметим, что математическая модель (1)–(3) с условиями на неотрицательность переменных xij является частным случаем классической
транспортной задачи, в которой количество поставщиков совпадает с количеством потребителей (m равно n), а запасы и потребности всех пунктов совпадают и равны единице (ai = b j =1, i, j =1, , n). Кроме того, следует
заметить, что оптимальные решения (в том числе опорные решения) транспортной задачи будут удовлетворять условиям альтернативности переменных xij . При этом и опорные решения, и оптимальные решения
транспортной задачи будут вырожденными с количеством вырожденных переменных, равным n – 1.
Формально математически задача о назначениях может быть сформулирована иначе.
Необходимо выбрать из каждой строки и каждого столбца неотрица-
тельной матрицы
|
c |
... |
c |
|
||
|
|
11 |
|
1n |
|
|
|
= |
|
|
|||
C |
... |
... ... |
|
|||
|
c |
... |
c |
|
|
|
|
|
11 |
|
|
nn |
|
ровно по одному элементу (всего n элементов) так, чтобы их сумма была наибольшей из возможных. Такая задача называется задачей выбора.
37
2.2.ВЕНГЕРСКИЙ МЕТОДДЛЯЗАДАЧИВЫБОРА
По существу, венгерский метод является уточнением двойственного симплекс-метода применительно к транспортной задаче. Идею метода высказал венгерский математик Й. Эгервари в 1931 году, а в 1955 году американский математик Г. Кун развил его идею и назвал метод венгерским.
Введем следующие понятия:
1. Две матрицы С ={cij} и D ={dij } называются эквивалентными, ес-
ли cij = dij +αi + β j для любых i и j.
Задачи выбора, определяемые эквивалентными матрицами, являются
эквивалентными.
Эквивалентность задач выбора означает, что оптимальное решение задачи о назначении для матрицы С ={cij} совпадает с оптимальным ре-
шением задачи о назначении для матрицы D ={dij }. |
|
|
2. Нулевые элементы матрицы C (обозначим их |
z1, z2,..., zk ) называ- |
|
ются независимыми нулями, если для любого нуля |
zi , |
0 ≤i ≤ k , строка |
и столбец, на пересечении которых лежит этот нуль zi , |
не содержат дру- |
|
гие нулевые элементы zL,L ≠ i.
3. Выделенные элементы матрицы C – это элементы строк и/или столбцов, помеченных знаком +. Все остальные элементы матрицы C –
невыделенные элементы.
Алгоритм венгерского метода состоит из подготовительного этапа и из не более чем (n – 2) последовательно проводимых итераций. Каждая итерация состоит из эквивалентных преобразований матрицы и из выбора одного дополнительного нового независимого нуля. Таким образом, окончательным результатом каждой итерации является увеличение количества независимых нулей, имеющихся в начале итерации, на единицу. Как только количество независимых нулей становится равным n, задача выбора оказывается решенной: оптимальный вариант определяется позициями независимых нулей в последней из матриц, эквивалентных исходной матрице.
38
2.3.АЛГОРИТМВЕНГЕРСКОГО МЕТОДА
Подготовительный этап
1. Для исходной матрицы С ={cij} с неотрицательными элементами находим максимальный элемент в каждом столбце.
2.Для каждого столбца все элементы этого столбца последовательно вычитаем из максимального, а результат оставляем в соответствующей позиции. В результате получаем сохранение эквивалентной матрицы с неотрицательными элементами, в каждом столбце которой имеется, по крайней мере, один нулевой элемент (нуль).
3.Из всех элементов каждой строки вычитаем минимальный элемент этой строки. В результате получаем эквивалентную матрицу C0 с неотри-
цательными элементами, в каждом столбце и в каждой строке которой имеется, по меньшей мере, один нуль.
4. Находим и помечаем независимые нули символом «*» по схеме: а) в первом столбце помечаем «*» произвольный нуль; б) во втором столбце помечаем «*» (если найдется) тот нуль, в строке
которого нет нуля, помеченного «*»;
в) аналогично просматриваем один за другим все столбцы матрицы C0 . На этом подготовительный этап заканчивается. Результатом подготовительного этапа являются, по меньшей мере, два независимых нуля (в силу того, что в каждой строке и в каждом столбце был получен хотя бы один нулевой элемент) – это начальное количество независимых нулей. Поскольку результатом работы каждой основной итерации является добавление одного нового независимого нуля, то именно поэтому оценка
количества итераций равна (n – 2).
Основной этап (итерация)
Шаг 0. Получена матрица C0 . Если в матрице отмечено ровно n независимых нулей, процесс решения заканчивается и оптимальное решение определяется позициями независимых нулей (0*) матрицы C0 .
39
Если же число независимых нулей меньше n, то помечаем знаком «+» столбцы матрицы C0 , содержащие 0*. Соответствующие элементы столбцов являются выделенными элементами.
Шаг 1. Если среди невыделенных элементов матрицы C0 нет нулевых, переходим к шагу 3. Если невыделенный нуль есть, то может быть один из случаев:
а) строка, содержащая невыделенный нуль, содержит также 0*; б) строка, содержащая невыделенный нуль, не содержит 0*.
Вслучае а) помечаем найденный нуль штрихом, помечаем знаком «+» строку, содержащую этот 0', и убираем знак выделения «+» над столбцом, который пересекается с выделенной строкой по 0*. Возвращаемся на начало шага 1.
Вслучае б) помечаем найденный нуль штрихом и переходим к шагу 2. Таким образом, шаг 1 закончится, когда:
1) либо все нули будут находиться в выделенных строках / столбцах –
при этом переходим к шагу 3 – требуется дополнительное эквивалентное преобразование матрицы;
2) либо обнаружится невыделенный нуль в строке, где нет нуля со звездочкой, – при этом переходим к шагу 2 – можно добавлять новый независимый нуль и заканчивать итерацию.
Шаг 2. Строим последовательность из элементов 0' и 0* матрицы C0 по правилу:
а) последовательность начинается с исходного элемента 0' (точнее, с последнего нуля, помеченного штрихом на шаге 1);
б) от 0' по столбцу идем к 0* (если такой найдется); в) от 0* по строке идем к 0'; г) повторяем пункт б).
Итак, последовательность образуется передвижением от 0' к 0* по столбцу, от 0* к 0' по строке и т. д. При этом последовательность всегда начинается с нуля со штрихом (пункт а) и заканчивается нулем
40
со штрихом (завершение построения последовательности возможно только в пункте б) на элементе 0').
Полученную последовательность преобразуем следующим образом: все 0* в последовательности заменяем нулями без пометок, а все 0' в последовательности заменяем на 0*. Затем «чистим» матрицу C0 : убираем все штрихи и все знаки выделения «+». В результате получаем матрицу C0 , в которой количество независимых нулей (0*) увеличено на единицу (в преобразуемой последовательности из 0* и 0' количество 0' на единицу больше количества 0*). На этом итерация алгоритма завершается. Переходим к новой итерации, которая начинается с шага 0.
Шаг 3. К этому шагу в матрице C0 среди невыделенных элементов нет нулевых элементов. Поэтому требуется эквивалентное преобразование матрицы для того, чтобы получить дополнительные нули среди невыделенных элементов матрицы:
а) выбираем среди невыделенных элементов минимальный и обозначаем его h;
б) величину h > 0 вычитаем из всех элементов матрицы C0 , располо-
женных в невыделенных строках;
в) величину h прибавляем ко всем элементам матрицы C0 , располо-
женным в выделенных столбцах.
В результате получим эквивалентную матрицу C0′ с невыделенными нулевыми элементами (по крайней мере один нулевой элемент точно бу-
дет в позиции минимального элемента со значением h). Полагаем C0 |
=C0 |
|
′ |
и переходим к шагу 1. |
|
41
2.4.ПРИМЕРРЕШЕНИЯ ЗАДАЧИ ОНАЗНАЧЕНИЯХВЕНГЕРСКИМ МЕТОДОМ
Решить задачу о назначениях, которая определяется положительной матрицей
|
3 |
4 |
2 |
2 |
1 |
|
|
4 |
5 |
3 |
1 |
3 |
|
|
|
|||||
С = |
4 |
3 |
1 |
1 |
1 |
. |
|
3 |
1 |
2 |
2 |
2 |
|
|
|
|||||
|
1 |
3 |
1 |
2 |
1 |
|
|
|
Замечание. При решении задачи знак выделения «+», подлежащий уничтожению в случае а) на первом шаге, обводим кружком. Последовательность из элементов 0' и 0* на втором шаге указываем стрелками.
Подготовительный этап
Максимальный элемент первого столбца матрицы C равен 4. Поэтому для преобразования первого столбца необходимо из 4 вычесть элементы первого столбца матрицы. Аналогично для получения второго, третьего, четвертого и пятого столбцов вычитаем элементы этих столбцов из максимальных элементов 5, 3, 2 и 3 соответственно.
Получили матрицу, в которой в каждом столбце есть, по крайней мере, один нулевой элемент. Далее необходимо из всех элементов каждой строки вычитать минимальный элемент этой строки. Но в полученной матрице минимальный элемент каждой строки равен нулю, поэтому матрица C0 найдена. Находим и помечаем независимые нули: в первом столбце выбираем произвольный нуль, тогда во втором и в третьем столбцах независимых нулей нет, в четвертом столбце помечаем независимый нуль, в пятом столбце независимого нуля нет (рис. 1).
Следует заметить, что в рассматриваемой задаче возможны и другие варианты выбора независимых нулей – предлагается рассмотреть эти варианты самостоятельно.
42
|
3 |
4 |
2 |
2 |
1 |
|
|
|
1 |
|
1 |
1 |
|
0* |
|
2 |
|
|
|
|
|
|
|
||||||||||||||
|
|
|
0* |
|
0 |
0 |
|
1 |
|
0 |
|
|||||||
|
4 |
5 |
3 |
1 |
3 |
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
0 |
|
2 |
2 |
|
1 |
|
2 |
|
|||||
С = |
4 |
3 |
1 |
1 |
1 |
|
~ |
C0 |
|
|
|
|||||||
= |
|
|
4 |
1 |
|
0 |
|
1 |
. |
|||||||||
|
3 |
1 |
2 |
2 |
2 |
|
|
|
1 |
|
|
|
|
|||||
|
|
|
|
|
3 |
|
2 |
2 |
|
0 |
|
2 |
|
|||||
|
1 |
3 |
1 |
2 |
1 |
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
||||||||||||||
|
|
|
|
|
+ |
|
|
|
+ |
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
Рис. 1. Исходная матрица С и полученная на подготовительном этапе эквивалентная матрица С0. Шаг 0 первой итерации
Основной этап Первая итерация
Шаг 0. Выделяем знаком «+» первый и четвертый столбцы, поскольку они содержат 0* (см. рис. 1). Элементы этих столбцов – выделенные, остальные элементы матрицы С0 (элементы второго, третьего и пятого столбцов) – невыделенные.
Шаг 1. Просматриваем среди невыделенных элементов невыделенные нули матрицы C0 (такие нули есть и во втором, и в третьем, и в пятом столбцах; см. рис. 1). Помечаем штрихом нуль, расположенный во второй строке и во втором столбце. Поскольку в этой строке содержится 0*, то имеем случай а) и ставим «+» на вторую строку, а знак «+» над первым столбцом убираем, обводя его кружком (см. рис. 2, б).
|
1 |
|
1 |
1 |
|
0* |
|
2 |
|
|
1 |
1 |
1 |
|
0* |
|
2 |
|
|
||||||
|
|
|
|
|
|
|
|||||||||||||||||||
|
|
|
|
|
|||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
0* |
|
0 |
0 |
|
1 |
|
0 |
|
|
+ |
0* |
0' 0 1 0 |
|
|
|||||||||
|
|
|
|
|
|
|
|
||||||||||||||||||
|
|
0 |
|
2 |
2 |
|
1 |
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0' |
2 2 |
|
|
1 |
|
|
2 |
|
|||||||||||
C0 = |
|
|
|
|
|
~ C0 = |
|
|
|
||||||||||||||||
1 |
|
4 |
1 |
|
0 |
|
1 |
|
|
1 |
4 |
1 |
|
|
0 |
|
|
1 |
|
||||||
|
|
3 |
|
2 |
2 |
|
0 |
|
2 |
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
3 |
2 2 |
|
|
0 |
|
|
2 |
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|||||||||||||||||||||
|
|
+ |
|
|
|
+ |
|
|
|
|
|
|
|
|
|
+ |
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
а |
|
|
|
|
|
|
|
|
|
|
б |
|
|
|
|
|
|
|
|
|
Рис. 2. Первая итерация: а – шаг 0; б – шаг 1
43
В первом столбце теперь появился невыделенный и непомеченный нуль, помечаем штрихом этот нуль (первый столбец, третья строка). Получили, что третья строка имеет нуль со штрихом, но не содержит 0*. Имеем случай б), поэтому переходим к шагу 2.
Шаг 2. Строим последовательность: от последнего элемента, помеченного 0' (это первый столбец, третья строка), движемся по столбцу к 0* (это первый столбец, вторая строка), затем от 0* из второй строки переходим к 0', расположенному в той же строке и во втором столбце (рис. 3). Поскольку второй столбец не содержит 0*, то процесс построения последовательности закончен. Найденная последовательность состоит из элементов: c31 = 0', c21 = 0*, c22 = 0'. Преобразованная последовательность
принимает вид c31 = 0*, c21 = 0, c22 = 0*. Вносим эти изменения в матрицу C0 , затем «чистим» ее (т. е. убираем знаки «+» и знаки «штрих») и получаем в результате матрицу C0 , в которой число независимых нулей (0*) увеличено на единицу. На этом первая итерация алгоритма завершается.
|
|
1 |
1 |
1 |
0* |
2 |
|
|
|
1 |
1 |
1 |
0* |
2 |
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
0 |
* |
0' 0 |
1 |
0 |
|
|
||||||||||||
|
+ |
|
|
|
0 |
0* |
0 |
1 |
0 |
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
C0 = |
0' |
2 |
2 |
1 |
|
2 |
~ C0 |
= |
0* |
2 |
2 |
1 |
2 |
|
~ |
||||
|
1 |
4 |
1 |
0 |
|
1 |
|
||||||||||||
|
|
|
|
|
|
1 |
4 |
1 |
0 |
1 |
|
|
|||||||
|
|
3 |
2 |
2 |
0 |
|
2 |
|
|
|
|
|
|||||||
|
|
|
|
|
|
3 |
2 |
2 |
0 |
2 |
|
|
|||||||
|
|
|
|
|
|
|
+ |
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
Рис. 3. Первая итерация. Шаг 2
Поскольку последующие две итерации проводятся аналогично, ниже приводятся результаты вычислений без дополнительных пояснений.
Вторая итерация (рис. 4–7)
44
|
1 |
|
|
|
|
* |
|
|
|
1 |
|
1 |
1 |
|
0* |
|
2 |
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||
|
|
|
|
|
|
|
|||||||||||||||||||||||
|
1 |
1 |
|
|
0 |
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
0 0* |
|
|
|
|
|
|
+ |
|
|
0* 0' 1 0 |
|
|
|
|
|||||||||||||
|
|
0 |
|
1 |
0 |
|
0 |
|
|
|
|||||||||||||||||||
|
|
|
|
|
|
|
|||||||||||||||||||||||
|
|
* |
2 |
2 |
|
1 |
2 |
|
|
|
* |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
C0 |
|
~ C0 = |
|
|
|
2 2 |
|
1 |
|
2 |
~ |
||||||||||||||||||
= |
0 |
|
|
|
0 |
|
|
|
|
|
|||||||||||||||||||
|
1 |
4 |
1 |
|
|
0 |
1 |
|
1 |
|
|
|
4 |
1 |
|
|
|
0 |
|
|
|
1 |
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
3 |
2 |
2 |
|
0 |
2 |
|
3 |
|
|
|
2 2 |
|
0 |
|
2 |
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||
|
|
+ |
+ |
|
|
|
+ |
|
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
+ |
|
|
|
|
|
|
+ |
|
|
|
|
|
|
|
|
||
|
|
|
|
а |
|
|
б |
|
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
Рис. 4. Вторая итерация: а – шаг 0; б – шаг 1
а б
Рис. 5. Вторая итерация: а – шаг 3 (вычитаем h = 1); б – шаг 3 (прибавляем h = 1)
|
+ 1 |
0' 0 0* 1 |
|
|
1 |
|
|
|
0* 1 |
|
|
|||||
|
|
|
0' 0 |
|
||||||||||||
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
0* 0' 2 0 |
|
1 |
0* 0' 2 |
0 |
|
|||||||||
|
+ |
|
|
|
|
|
||||||||||
C0 = |
|
0* |
1 |
1 1 1 |
|
~ C0 |
|
0* |
1 |
1 1 |
1 |
|
~ |
|||
|
1 |
3 |
0 0 0 |
|
= |
1 |
3 |
0 0 |
0 |
|
||||||
|
|
|
|
|
|
|
||||||||||
|
|
3 |
1 |
1 0' 1 |
|
|
|
3 |
1 |
1 0' 1 |
|
|
||||
|
|
+ |
|
|
|
|
|
+ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
а |
|
|
|
|
|
|
|
б |
|
|
||
Рис. 6. Вторая итерация: а – шаг 1; б – шаг 2 (строим последовательность)
45
|
|
|
1 |
0* |
0 |
0 |
1 |
|
|
|
|
1 |
0 |
0* |
2 |
0 |
|
|
|
|
|
|||||
C |
0 |
= |
0* |
1 |
1 |
1 |
1 |
|
|
|
1 |
3 |
0 |
0 |
0 |
|
|
|
|
|
|
|||||
|
|
|
3 |
1 |
1 |
0* |
1 |
|
|
|
|
|
Рис. 7. Вторая итерация. Шаг 2 («чистим» матрицу)
Третья итерация (рис. 8)
|
1 |
0* |
|
0 |
0 |
|
1 |
|
|
1 |
0* |
0 |
0 |
1 |
|
||
|
|
|
|
||||||||||||||
|
|
|
|
|
* |
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
0* 2 0 |
|
|||
|
1* |
0 |
0 |
2 |
|
0 |
|
|
1 0 |
|
|||||||
C0 |
= |
0 1 |
|
1 |
1 |
|
1 |
|
~ C0 |
= |
0* |
1 |
1 1 1 |
|
|||
|
1 |
3 |
|
0 |
0 |
|
0' |
|
|
|
3 |
0 |
0 |
|
|
||
|
|
3 1 |
|
1 |
0* |
|
1 |
|
|
1 |
0* |
||||||
|
|
|
|
|
|
|
3 |
1 |
1 |
* |
1 |
|
|||||
|
|
+ |
+ |
|
+ |
+ |
|
|
|
|
|
0 |
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
а |
|
|
|
|
|
|
|
|
б |
|
|
|
|
Рис. 8. Третья итерация: а – шаг 0, шаг 1; б – шаг 2
После третьей итерации количество независимых нулей (0*) стало равным размерности n матрицы, и поэтому процесс выбора закончен. Искомые элементы исходной матрицы C соответствуют позициям независимых нулей матрицы C0 . Оптимальное решение задачи о назначениях
с исходной матрицей C определяется набором {xij}, i, j =1, ,5 со значениями: x12 = x23 = x31 = x45 = x54 =1. Содержательно это означает, что первую работу выполняет второй исполнитель, вторую – третий исполнитель, третью работу – первый исполнитель, четвертую – пятый исполнитель и пятую работу выполняет четвертый исполнитель.
46
Оптимальное значение целевой функции – суммарная эффективность от назначения исполнителей по работам:
L(x) = c12 +c23 +c31 +c45 +c54 = 4 +3 + 4 + 2 + 2 =15.
2.5.ЗАДАНИЯДЛЯ РЕШЕНИЯ ЗАДАЧИ ОНАЗНАЧЕНИЯХВЕНГЕРСКИММЕТОДОМ
Во всех заданиях матрицы эффективности положительны.
1.
|
10 |
11 |
12 |
13 |
10 |
|
|
|
|
1 |
2 |
5 |
7 |
10 |
|
|
|
|
|||||
С |
= |
3 |
4 |
6 |
8 |
11 |
|
|
|
7 |
6 |
5 |
4 |
12 |
|
|
|
|
|||||
|
|
1 |
1 |
2 |
3 |
|
|
|
|
13 |
|||||
L* = 44 |
|
|
|
|
|
||
3. |
|
|
|
|
|
|
|
|
10 |
11 |
12 |
13 |
10 |
|
|
|
|
1 |
2 |
1 |
3 |
10 |
|
|
|
|
|||||
С |
= |
2 |
1 |
3 |
1 |
11 |
|
|
|
3 |
2 |
1 |
2 |
12 |
|
|
|
|
|||||
|
|
3 |
2 |
1 |
1 |
|
|
|
|
13 |
|||||
L* =34 |
|
|
|
|
|
||
5. |
|
|
|
|
|
|
|
|
10 |
11 |
12 |
13 |
10 |
|
|
|
|
2 |
1 |
2 |
3 |
10 |
|
|
|
|
|||||
С = |
1 |
2 |
3 |
2 |
11 |
||
|
|
1 |
2 |
2 |
3 |
12 |
|
|
|
|
|||||
|
|
4 |
5 |
6 |
2 |
|
|
|
|
13 |
|||||
L* =35
2.
16 |
11 |
12 |
13 |
10 |
|
|
|
6 |
5 |
4 |
3 |
10 |
|
|
|
|||||
С = |
5 |
6 |
7 |
8 |
11 |
|
|
4 |
5 |
6 |
7 |
12 |
|
|
|
|||||
|
3 |
4 |
5 |
6 |
|
|
|
13 |
|||||
L* = 48 |
|
|
|
|
|
|
4. |
|
|
|
|
|
|
16 |
11 |
12 |
13 |
10 |
|
|
|
7 |
6 |
5 |
4 |
10 |
|
|
|
|||||
С = |
6 |
7 |
5 |
4 |
11 |
|
|
5 |
6 |
7 |
8 |
12 |
|
|
|
|||||
|
4 |
5 |
6 |
7 |
|
|
|
13 |
|||||
L* = 49 |
|
|
|
|
|
|
6. |
|
|
|
|
|
|
10 |
11 |
12 |
13 |
10 |
|
|
|
6 |
7 |
6 |
5 |
10 |
|
|
|
|||||
С = |
1 |
6 |
5 |
6 |
11 |
|
|
1 |
2 |
8 |
9 |
12 |
|
|
|
|||||
|
1 |
2 |
3 |
8 |
|
|
|
13 |
|||||
L* = 46
47
7.
|
10 |
11 |
12 |
13 |
10 |
|
|||
|
|
4 |
5 |
6 |
7 |
10 |
|
||
|
|
|
|||||||
С = |
|
5 |
4 |
3 |
2 |
11 |
|||
|
|
3 |
5 |
4 |
5 |
12 |
|
||
|
|
|
|||||||
|
|
2 |
3 |
4 |
5 |
|
|
||
|
|
13 |
|||||||
L* = 42 |
|
|
|
|
|
|
|
||
9. |
|
|
|
|
|
|
|
|
|
|
15 |
16 |
17 |
18 |
19 |
|
|||
|
|
1 |
2 |
3 |
4 |
16 |
|
||
|
|
|
|||||||
С = |
|
2 |
1 |
5 |
6 |
17 |
|
|
|
|
|
1 |
2 |
1 |
7 |
18 |
|
||
|
|
|
|||||||
|
|
5 |
6 |
7 |
8 |
19 |
|
||
|
|
|
|||||||
L* = 49 |
|
|
|
|
|
|
|
||
11. |
|
|
|
|
|
|
|
|
|
|
15 |
16 |
17 |
18 |
19 |
|
|
||
|
|
1 |
2 |
4 |
1 |
17 |
|
|
|
|
|
|
|
||||||
С = |
|
2 |
1 |
2 |
6 |
19 |
|
|
|
|
|
|
|||||||
|
|
3 |
2 |
2 |
5 |
20 |
|
||
|
|
4 |
6 |
8 |
9 |
19 |
|
|
|
|
|
|
|
||||||
L* =35 |
|
|
|
|
|
|
|
||
13. |
|
|
|
|
|
|
|
|
|
|
15 |
16 |
17 |
18 |
19 |
|
|
||
|
|
1 |
2 |
4 |
2 |
17 |
|
|
|
|
|
|
|
||||||
С = |
|
2 |
1 |
2 |
4 |
18 |
|
|
|
|
|
|
|||||||
|
|
3 |
2 |
2 |
5 |
20 |
|
||
|
|
4 |
6 |
8 |
9 |
19 |
|
|
|
|
|
|
|
||||||
L* = 44
8.
|
16 |
11 |
12 |
13 |
14 |
|
|||
|
|
7 |
6 |
4 |
3 |
10 |
|
||
|
|
|
|||||||
С = |
|
1 |
6 |
2 |
1 |
11 |
|||
|
|
1 |
2 |
5 |
3 |
12 |
|
||
|
|
|
|||||||
|
|
1 |
3 |
6 |
4 |
|
|
|
|
|
|
13 |
|||||||
L* = 44 |
|
|
|
|
|
|
|
||
10. |
|
|
|
|
|
|
|
|
|
|
15 |
16 |
17 |
18 |
19 |
|
|
||
|
|
3 |
1 |
2 |
3 |
18 |
|
|
|
|
|
|
|
||||||
С = |
|
2 |
3 |
7 |
5 |
17 |
|
|
|
|
|
1 |
2 |
3 |
8 |
16 |
|
|
|
|
|
|
|
||||||
|
|
5 |
4 |
3 |
3 |
15 |
|
|
|
|
|
|
|
||||||
L* =54 |
|
|
|
|
|
|
|
||
12. |
|
|
|
|
|
|
|
|
|
|
15 |
16 |
17 |
18 |
19 |
|
|||
|
|
1 |
3 |
3 |
5 |
17 |
|
||
|
|
|
|||||||
С = |
|
2 |
1 |
2 |
6 |
19 |
|
||
|
|
||||||||
|
|
3 |
2 |
2 |
5 |
20 |
|
||
|
|
4 |
6 |
8 |
9 |
19 |
|
||
|
|
|
|||||||
L* = 71 |
|
|
|
|
|
|
|
||
14. |
|
|
|
|
|
|
|
|
|
|
15 |
16 |
17 |
18 |
19 |
|
|||
|
|
1 |
2 |
4 |
2 |
17 |
|
||
|
|
|
|||||||
С = |
|
2 |
1 |
2 |
6 |
19 |
|
||
|
|
||||||||
|
|
3 |
2 |
2 |
5 |
20 |
|
||
|
|
4 |
6 |
8 |
9 |
19 |
|
||
|
|
|
|||||||
L* = 44
48
15.
|
15 |
16 |
17 |
18 |
19 |
|
|
|
|
1 |
2 |
4 |
6 |
16 |
|
|
|
|
|||||
С = |
|
2 |
1 |
2 |
4 |
17 |
|
|
|
||||||
|
|
3 |
2 |
2 |
5 |
18 |
|
|
|
4 |
6 |
8 |
9 |
19 |
|
|
|
|
|||||
L* =38 |
|
|
|
|
|
||
17. |
|
|
|
|
|
|
|
|
15 |
16 |
17 |
18 |
19 |
|
|
|
|
1 |
4 |
4 |
2 |
16 |
|
|
|
|
|||||
С = |
|
2 |
1 |
2 |
4 |
17 |
|
|
|
||||||
|
|
3 |
2 |
2 |
5 |
18 |
|
|
|
4 |
6 |
7 |
8 |
19 |
|
|
|
|
|||||
L* = 40 |
|
|
|
|
|
||
19. |
|
|
|
|
|
|
|
|
15 |
16 |
17 |
18 |
19 |
|
|
|
|
1 |
1 |
3 |
3 |
16 |
|
|
|
|
|||||
С = |
|
2 |
1 |
2 |
6 |
17 |
|
|
|
||||||
|
|
3 |
2 |
2 |
8 |
18 |
|
|
|
4 |
6 |
7 |
8 |
19 |
|
|
|
|
|||||
L* = 42 |
|
|
|
|
|
||
21. |
|
|
|
|
|
|
|
|
15 |
16 |
17 |
18 |
19 |
|
|
|
|
1 |
1 |
3 |
1 |
16 |
|
|
|
|
|||||
С = |
|
2 |
8 |
2 |
6 |
17 |
|
|
|
||||||
|
|
2 |
2 |
2 |
8 |
18 |
|
|
|
4 |
6 |
7 |
8 |
19 |
|
|
|
|
|||||
L* =30
16.
|
15 |
16 |
17 |
18 |
19 |
|
|
|
|
1 |
2 |
4 |
6 |
17 |
|
|
|
|
|||||
С = |
|
2 |
1 |
2 |
4 |
18 |
|
|
|
||||||
|
|
3 |
2 |
2 |
5 |
20 |
|
|
|
4 |
6 |
8 |
9 |
19 |
|
|
|
|
|||||
L* = 42 |
|
|
|
|
|
||
18. |
|
|
|
|
|
|
|
|
15 |
16 |
17 |
18 |
19 |
|
|
|
|
1 |
2 |
4 |
6 |
16 |
|
|
|
|
|||||
С = |
|
2 |
1 |
2 |
4 |
17 |
|
|
|
||||||
|
|
3 |
2 |
2 |
5 |
18 |
|
|
|
4 |
6 |
7 |
8 |
19 |
|
|
|
|
|||||
L* = 40 |
|
|
|
|
|
||
20. |
|
|
|
|
|
|
|
|
15 |
16 |
17 |
18 |
19 |
|
|
|
|
1 |
1 |
3 |
2 |
16 |
|
|
|
|
|||||
С = |
|
2 |
1 |
2 |
4 |
17 |
|
|
|
||||||
|
|
3 |
2 |
2 |
5 |
18 |
|
|
|
4 |
6 |
7 |
8 |
19 |
|
|
|
|
|||||
L* =36 |
|
|
|
|
|
||
22. |
|
|
|
|
|
|
|
|
15 |
16 |
17 |
18 |
19 |
|
|
|
|
1 |
1 |
3 |
1 |
16 |
|
|
|
|
|||||
С = |
|
1 |
1 |
2 |
6 |
17 |
|
|
|
||||||
|
|
2 |
2 |
2 |
8 |
18 |
|
|
|
4 |
6 |
7 |
8 |
19 |
|
|
|
|
|||||
L* =30
49
23.
|
15 |
16 |
17 |
18 |
19 |
|
|
|
|
1 |
1 |
3 |
3 |
16 |
|
|
|
|
|||||
С = |
|
2 |
8 |
8 |
6 |
17 |
|
|
|
||||||
|
|
2 |
2 |
2 |
8 |
18 |
|
|
|
4 |
6 |
7 |
8 |
19 |
|
|
|
|
|||||
L* = 42
25.
|
15 |
16 |
17 |
18 |
19 |
|
|
|
|
1 |
3 |
5 |
10 |
16 |
|
|
|
|
|||||
С = |
|
2 |
5 |
5 |
6 |
17 |
|
|
|
||||||
|
|
2 |
2 |
2 |
8 |
18 |
|
|
|
4 |
6 |
7 |
8 |
19 |
|
|
|
|
|||||
L* = 78 |
|
|
|
|
|
||
27. |
|
|
|
|
|
|
|
|
15 |
16 |
17 |
18 |
19 |
|
|
|
|
1 |
2 |
6 |
4 |
16 |
|
|
|
|
|||||
С = |
|
2 |
5 |
5 |
6 |
17 |
|
|
|
||||||
|
|
2 |
2 |
2 |
8 |
18 |
|
|
|
4 |
6 |
7 |
8 |
19 |
|
|
|
|
|||||
L* =54 |
|
|
|
|
|
||
29. |
|
|
|
|
|
|
|
|
15 |
16 |
17 |
18 |
19 |
|
|
|
|
1 |
2 |
3 |
4 |
16 |
|
|
|
|
|||||
С = |
|
2 |
1 |
5 |
6 |
17 |
|
|
|
||||||
|
|
1 |
2 |
2 |
8 |
18 |
|
|
|
5 |
6 |
7 |
8 |
19 |
|
|
|
|
|||||
L* =57
24.
|
15 |
16 |
17 |
18 |
19 |
|
|
|
|
1 |
1 |
3 |
1 |
16 |
|
|
|
|
|||||
С = |
|
2 |
8 |
8 |
6 |
17 |
|
|
|
||||||
|
|
2 |
2 |
2 |
8 |
18 |
|
|
|
4 |
6 |
7 |
8 |
19 |
|
|
|
|
|||||
L* =30 |
|
|
|
|
|
||
26. |
|
|
|
|
|
|
|
|
15 |
16 |
17 |
18 |
19 |
|
|
|
|
1 |
1 |
3 |
7 |
16 |
|
|
|
|
|||||
С = |
|
2 |
5 |
5 |
6 |
17 |
|
|
|
||||||
|
|
2 |
2 |
2 |
8 |
18 |
|
|
|
4 |
6 |
7 |
8 |
19 |
|
|
|
|
|||||
L* = 72 |
|
|
|
|
|
||
28. |
|
|
|
|
|
|
|
|
15 |
16 |
17 |
18 |
19 |
|
|
|
|
1 |
3 |
7 |
4 |
16 |
|
|
|
|
|||||
С = |
|
2 |
5 |
5 |
6 |
17 |
|
|
|
||||||
|
|
2 |
2 |
2 |
8 |
18 |
|
|
|
4 |
6 |
7 |
8 |
19 |
|
|
|
|
|||||
L* = 62 |
|
|
|
|
|
||
30. |
|
|
|
|
|
|
|
|
15 |
16 |
17 |
18 |
19 |
|
|
|
|
1 |
2 |
6 |
4 |
16 |
|
|
|
|
|||||
С = |
|
2 |
5 |
5 |
6 |
17 |
|
|
|
||||||
|
|
1 |
2 |
2 |
8 |
18 |
|
|
|
5 |
6 |
7 |
8 |
19 |
|
|
|
|
|||||
L* =51
50
