
- •Теория принятия решений
- •1. Элементы теории игр
- •1.1 Основные понятия
- •1.2 Матричные игры
- •1.3 Принцип минимакса. Седловые точки
- •1.4 Смешанные стратегии
- •1.5 Пример полного решения матричной игры
- •1.6 Задания по теории игр
- •2. Задача о назначениях
- •2.1 Содержательная постановка
- •2.2 Математическая модель
- •2.3 Венгерский метод для задачи о назначениях
- •2.4 Алгоритм венгерского метода
- •2.5 Пример решения задачи о назначениях венгерским методом
- •2.6 Задания по задаче о назначениях
- •3. Задача о коммивояжере
- •3.1 Постановка задачи
- •3.2 Математическая модель
- •3.3 Метод ветвей и границ
- •3.4 Метод ветвей и границ для решения задачи коммивояжера
- •3.5 Пример решения задачи коммивояжера
- •3.6 Задания по задаче о коммивояжере
- •4. Динамическое программирование
- •4.1 Построение модели дп
- •4.2 Построение вычислительной схемы дп
- •4.3 Несколько замечаний к методу дп
- •4.4 Задача о распределении ресурсов
- •4.5 Пример решения задачи о распределении ресурсов
- •4.6 Задания по задаче о распределении ресурсов
- •4.7 Задача о замене оборудования
- •4.8 Пример решения задачи о замене оборудования
- •4.9 Задания по задаче о замене оборудования
- •Библиографический список
- •1. Элементы теории игр 3
- •2. Задача о назначениях 14
- •3. Задача о коммивояжере 25
- •4. Динамическое программирование 35
2.3 Венгерский метод для задачи о назначениях
По существу венгерский метод является уточнением двойственного симплекс-метода применительно к транспортной задаче. Идею метода высказал венгерский математик Эгервари в 1931, в 1953 г. Другой венгерский математик – Г.Кун развил его идею и назвал метод венгерским [3].
Введем следующие понятия:
1. Две матрицы
и
называютсяэквивалентными
,
если
для любыхiиj.
Задачи выбора, определяемые эквивалентными матрицами, являются эквивалентными.
2. Нулевые элементы
матрицыCназываютсянезависимыми нулями,если для любого нуля
,
,
строка и столбец, на пересечении которого
лежит этот нуль
,
не содержат другие нулевые элементы
3. Выделенные элементыматрицыC– это элементы строк или столбцов, помеченных знаком +. Все остальные элементы матрицыC– невыделенные элементы.
Алгоритм состоит из подготовительного этапа и не более чем (n–2) последовательно проводимых итераций. Каждая итерация состоит из эквивалентных преобразований матрицы и выбора максимального числа независимых нулей. Окончательным результатом каждой итерации является увеличение числа независимых нулей, имеющихся в начале итерации, на единицу. Как только количество независимых нулей становится равнымn, задача выбора оказывается решенной: оптимальный вариант определяется позициями независимых нулей в последней из матриц, эквивалентных исходной матрице.
2.4 Алгоритм венгерского метода
Подготовительный этап
1.Находим максимальный элемент в каждом столбце матрицыC.
2.Для каждого столбца все элементы этого столбца последовательно вычитаем из максимального, а результат оставляем в соответствующей позиции. В результате получаем матрицу с неотрицательными элементами, в каждом столбце которой имеется, по крайней мере, один 0.
3.Из всех элементов каждой строки вычитаем
минимальный элемент этой строки. В
результате получаем матрицус неотрицательными элементами, в каждой
строке и каждом столбце которой имеется,
по меньшей мере, один нуль.
4.Помечаем независимые нули символом «*» по схеме:
а) в первом столбце помечаем произвольный нуль;
б) во втором столбце помечаем (если найдется) тот нуль, в строке которого нет нуля, помеченного «*»;
в) аналогично
просматриваем один за другим все столбцы
матрицы
.
На этом подготовительный этап заканчивается.
Основной этап
Шаг 0. Получена
матрица
.
Если в матрице отмечено ровноnнулей, процесс решения заканчивается
и оптимальное решение определяется
позициями независимых нулей (0*) матрицы
.
Если же число
независимых нулей < n,
то помечаем знаком + столбцы матрицы,
содержащие 0*. Соответствующие элементы
столбцов являются выделенными элементами.
Шаг 1. Если среди
невыделенных элементов матрицы
нет нулевых, переходим к шагу 3. Если
невыделенный нуль есть, то может быть
один из случаев:
а) строка, содержащая невыделенный нуль, содержит также 0*;
б) строка, содержащая невыделенный нуль, не содержит 0*.
В случае а) помечаем найденный нуль штрихом, помечаем знаком + строку, содержащую этот 0', и убираем знак выделения + над столбцом, который пересекается с выделенной строкой по 0*. Возвращаемся на начало шага 1.
В случае б) помечаем найденный нуль штрихом и переходим к шагу 2.
Таким образом, шаг 1 закончится, когда:
1) либо все нули будут выделены – при этом переходим к шагу 3;
2) либо обнаружится невыделенный нуль в строке, где нет нуля со звездочкой – при этом переходим к шагу 2.
Шаг 2. Строим
последовательность из элементов 0' и 0*
матрицы
по правилу:
а) последовательность начинается с исходного 0' (последнего нуля, помеченного штрихом);
б) от 0' по столбцу идем к 0* (если такой найдется);
в) от 0* по строке идем к 0';
г) повторяем пункт б).
Итак, последовательность образуется передвижением от 0' к 0* по столбцу, от 0* к 0' по строке и т.д. При этом последовательность всегда начинается с нуля со штрихом (пункт а)) и заканчивается нулем со штрихом (завершение построения последовательности возможно в пункте б) на элементе 0').
Полученную
последовательность преобразуем так.
Все 0* в последовательности заменяем на
обыкновенные нули, все 0' в последовательности
заменяем на 0*. Затем чистим матрицу
:
убираем все штрихи, все знаки выделения
+. В результате получаем матрицу
,
в которой число независимых нулей (0*)
увеличено на единицу. На этом итерация
алгоритма завершается. Переходим к шагу
0.
Шаг 3. К этому шагу
в матрице
среди невыделенных элементов нет нулевых
элементов. Поэтому:
а) выбираем среди невыделенных элементов минимальный и обозначаем его h;
б) величину h>0
вычитаем из всех элементов матрицы,
расположенных ввыделенных строках;
в) величину hприбавляем ко всем элементам матрицы,
расположенных ввыделенных столбцах.
В
результате получим эквивалентную
матрицу
с невыделенными нулевыми элементами.
Полагаем
=
и переходим к шагу 1.