Многие оптимизационные задачи планирования, например задачи о потоках в сетях, могут быть сведены к моделям линейного программирования (ЛП). В свою очередь, любая задача ЛП может быть приведена к канонической модели минимизации линейной целевой функции с линейными ограничениями типа равенств. Если решение существует, то оно называется базисным. Геометрически базисные допустимые решения соответствуют вершинам (крайним точкам) выпуклого многогранника, который ограничивает множество допустимых решений.
При поиске оптимального решения задачи линейного программирования достаточно ограничиться перебором базисных допустимых решений. Число базисных решений может быть достаточно велико для их перечисления прямым перебором за реальное время. Для решения ряда прикладных задач линейного программирования разработаны специальные решения, учитывающие особенности постановок задач данного типа и указанное свойство множества допустимых решений. Решение линейной распределительной задачи симплекс-методом
Симплекс-метод является наиболее распространенным общим методом линейного программирования. Метод реализует направленный перебор допустимых базисных решений по соответствующим им крайним точкам выпуклого многогранника допустимых решений. На каждом шаге значение целевой функции строго убывает. Переход между крайними точками осуществляется по ребрам выпуклого многогранника допустимых решений в соответствии с простыми линейно-алгебраическими преобразованиями системы ограничений. Поскольку число крайних точек конечно, а целевая функция линейна, то перебирая крайние точки в направлении убывания целевой функции, симплекс-метод за конечное число шагов сходится к глобальному минимуму.
Основная задача линейного программирования (ЛП) имеет следующий вид (2.6)—(2.7):
Для решения задачи (2.8)-(2.9) используются алгоритмы последовательного преобразования симплекс-таблиц, в которых последовательно реализуются этапы получения опорного и оптимального решений.
Рассмотрим эту задачу на конкретном примере.
Пусть имеются заявки 3-х типов — А, В pi С, которые проходят обслуживание на приборах 4-х типов. Известно время прохождения заявки каждого типа на каждом приборе. Известен
фонд времени каждого прибора, известна прибыль от обслуживания заявки каждого типа. Необходимо определить оптимальное количество обслуживаемых заявок каждого типа. Исходные данные задачи занесены в табл. 2.6.
Введя дополнительные переменные, получим основную задачу ЛИ для решения. Перепишем условие задачи в виде, необходимом для формирования симплекс-таблиц:
Здесь базисные переменные х,..., xj имеют смысл неиспользованного ресурса. Заполняем симплекс-таблицу 2.7. Задача
решается в 2 этапа:
• получение опорного плана;
• получение оптимального плана.
Если столбец свободных членов bj положительный, то имеем опорный план. Если в последней строке (для критерия F) нет отрицательных элементов, то имеем оптимальный план. В данном конкретном случае имеем опорный план.
Построение оптимального плана.
Находим любой из отрицательных элементов в последней строке, например (—12). Столбец, в котором расположен этот элемент, называется разрешающим столбцом. Для разрешающего столбца найдем отношение каждой строки, за исключением последней, к элементу столбца. Среди этих отношений находим минимальное положительное число. Строка, в которой расположен этот элемент, называется разрешающей строкой. Элемент Srk (т — номер строки, к — номер столбца) на пересечении разрешающей строки и разрешающего столбца называется разрешающим элементом.
В результате преобразований количество отрицательных элементов в строке уменьшается, а значение F увеличивается, что говорит об улучшении плана. Преобразования таблиц повторяются до тех пор, пока в последней строке все элементы не станут по ложите льными.
Последующие этапы отражены в соответствующих симплекс
Выпишем оптимальное решение из последней.
Таким образом, заявки 3-го типа при оптимальном плане не обслуживаются. Кроме того, остаются неиспользованными 112 единиц ресурса прибора второго типа и 156 единиц ресурса прибора четвертого типа.
Решение задачи о назначении
Пусть имеется п работ (задач) и п кандидатов на их выполнение (персонала, процессоров, мест, машин). Пусть Cjj (i,j = 1,2....................................... п) — затраты (стоимость, время), связанные с назначением кандидата г на работу j. Введём переменные Xjj (i,j = 1,2,..., п) такие, что Xjj = 1, если кандидат i назначен на работу j, и xj = 0
в противном случае. Задача заключается в таком назначении (распределении), при котором суммарные затраты на выполнение всех работ минимальны.
Задача может быть сформулирована как задача ЛП
j=
кандидат назначается только на одну работу и каждая работа выполняется только одним кандидатом. Решение данной экстремальной задачи путем прямого перебора практически затруднительно при больших значениях п.
Есть специальный метод решения этой задачи, называемый венгерским методом. Рассмотрим конкретный пример. Пусть имеется 4 кандидата и 4 работы. Исходные данные задачи неVIIIчшил затрат cj (i,j = 1,2,...,4) содержатся в табл. 2.11.
Метод основывается на том факте, что оптимальность решения не нарушается при увеличении или уменьшении элементов строки (столбца) таблицы на одну и ту же величину. Отсюда следуют все основные преобразования исходной таблицы.
Алгоритм решения задачи разбивается на несколько этапов.
1. Получение нулей во всех строках и столбцах матрицы.
Для этого находим минимальный элемент каждой строки и вычитаем его из всех элементов соответствующей строки. Аналогично поступаем для каждого столбца в том случае, если он не содержит нуля после работы со строками.
2. Поиск оптимального решения.
В строке, имеющей меньшее количество нулей, отмечаем точкой один из нулей и зачёркиваем все остальные нули, находящиеся в строке и столбце, связанные с данным отмеченным нулем. Данная операция проводится последовательно для всех строк. Если каждая строка содержит отмеченный ноль (т. е. число нулей, отмеченных точкой, равно п), то имеем оптимальное решение. В этом случае полагаем, что для элементов матрицы с
отмеченными нулями хц = 1, а для других хц = 0. В противном случае переходим к следующему этапу.
3. Этап разметки строк и столбцов.
3.1. Отмечаем точкой строку, не содержащую ни одного отмеченного нуля.
3.2. Отмечаем столбец, содержащий перечёркнутый нуль в отмеченной строке.
3.3. Отмечаем строку, содержащую отмеченный нуль хотя бы в одном из отмеченных точкой столбцов.
Эта процедура разметки строк и столбцов выполняется до тех пор, пока есть что отмечать.
4. Перестановка отмеченных нулей.
Зачеркнём каждую неотмеченную строку и каждый отмеченный столбец. В не перечёркнутых клетках находим минимальный элемент. Вычтем этот элемент из элементов неперечёркнутых столбцов и добавим этот минимальный элемент ко всем элементам перечёркнутых строк. Возвращаемся к этапу 2.
Результаты 1-го и 2-го (заключительного) этапов отражены в таблицах 2.12, 2.13.
Таблица 2Л2 Таблица 2ЛЗ
В данном случае получаем решение (отмеченные нули выделены полужирным шрифтом и подчёркнуты), для которого с =17.
