Помощь по математическому программированию — решение заданий и задач онлайн

Помощь по математическому программированию
Здравствуйте! Я Людмила Анатольевна Фирмаль занимаюсь помощью более 17 лет. У меня своя команда грамотных, сильных преподавателей. Мы справимся с любой поставленной перед нами работой технического и гуманитарного плана. И не важно она по объёму на две формулы или огромная сложно структурированная на 125 страниц! Нам по силам всё, поэтому не стесняйтесь присылайте.
Если что-то непонятно, Вы всегда можете написать мне в воцап и я помогу!

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

Решение систем линейных уравнений методом Жордана-Гаусса

К оглавлению…

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

Помощь по математическому программированию онлайн

где Помощь по математическому программированию онлайн — заданные числа, Помощь по математическому программированию онлайн — неизвестные, Помощь по математическому программированию онлайн.

Помощь по математическому программированию онлайн

называются соответственно матрицей системы и расширенной матрицей системы.

Решением системы (1) называется упорядоченная совокупность чисел Помощь по математическому программированию онлайн, которые при подстановке Помощь по математическому программированию онлайн обращают каждое уравнение системы (1) в верное равенство. Система, имеющая хотя бы одно решение, называется совместной, иначе — несовместной. Решить систему — означает найти все ее решения. Две системы называются эквивалентными или равносильными, если они имеют одинаковые множества решений. Аналогично, расширенные матрицы эквивалентных систем будем называть эквивалентными.

Например, системы

Помощь по математическому программированию онлайн

с расширенными матрицами

Помощь по математическому программированию онлайн

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

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

Решение системы методом Гаусса и его модификацией — методом Жордана-Гаусса основано на следующем утверждении: матрица, полученная элементарными преобразованиями расширенной матрицы системы эквивалентна исходной матрице, т.е. элементарные преобразования расширенной матрицы системы не изменяют множества решений системы.

Суть обоих методов состоит в том, чтобы при помощи элементарных преобразований привести расширенную матрицу системы к наиболее простому виду, т.е. к такому виду, когда решение найти достаточно легко. Например, ясно, что систему Помощь по математическому программированию онлайн с матрицей Помощь по математическому программированию онлайн решить легче, чем исходную систему Помощь по математическому программированию онлайн с матрицей Помощь по математическому программированию онлайн, а решение системы Помощь по математическому программированию онлайн вообще очевидно. Переход от матрицы Помощь по математическому программированию онлайн к матрице Помощь по математическому программированию онлайн можно осуществить, например, прибавляя ко второй строке матрицы Помощь по математическому программированию онлайн, первой строки, умноженной на 2. Чтобы из матрицы Помощь по математическому программированию онлайн получить Помощь по математическому программированию онлайн, можно поступить следующим образом: сначала вторую строку Помощь по математическому программированию онлайн умножим на 1/9. а затем к первой строке прибавим вторую, умноженную на -2.

Переменная Помощь по математическому программированию онлайн называется базисной в Помощь по математическому программированию онлайн-м уравнении системы (1) если

Помощь по математическому программированию онлайн

Другими словами, переменная Помощь по математическому программированию онлайн является базисной в Помощь по математическому программированию онлайн-м уравнении, если коэффициент при ней в этом уравнении равен 1, а в остальных уравнениях — 0, т.е. в других уравнениях этой переменной нет.

Говорят, что матрица системы приведена к базисному виду (или имеет базис) если в каждом ее уравнении имеется базисная переменная. Например, матрица Помощь по математическому программированию онлайн системы Помощь по математическому программированию онлайн не имеет ни одной базисной переменной, матрица Помощь по математическому программированию онлайн имеет базисную переменную х2 в первом уравнении, а матрица Помощь по математическому программированию онлайн приведена к базисному виду.

Справедливо следующее утверждение: При помощи элементарных преобразований расширенную матрицу любой совместной системы можно привести к базисному виду.

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

Решение системы, полученное после приравнивания нулю всех свободных переменных, называется базисным.

Алгоритм приведения матрицы к базисному виду

Каждая итерация алгоритма состоит из трех шагов:

Шаг . В первой строке матрицы находим ненулевой элемент Помощь по математическому программированию онлайн, (желательно, Помощь по математическому программированию онлайн) . Если таких нет, то в случае Помощь по математическому программированию онлайн вычеркиваем нулевую строку; если Помощь по математическому программированию онлайн, то, очевидно, система несовместна. Найденный элемент назовем разрешающим (или ведущим).

Если Помощь по математическому программированию онлайн то переходим к шагу 3. иначе к шагу 2.

Шаг 2. Делим первую строку на разрешающий элемент Помощь по математическому программированию онлайн.

(После этого шага коэффициент при xt в первом уравнении будет Помощь по математическому программированию онлайн).

Шаг 3. Ко всем остальным строкам, кроме первой, прибавляем первую строку, умноженную на Помощь по математическому программированию онлайн, где Помощь по математическому программированию онлайн — номер изменяемой строки Помощь по математическому программированию онлайн. После этого шага коэффициент при Помощь по математическому программированию онлайн в остальных уравнениях будет 0 , и неременная Помощь по математическому программированию онлайн станет базисной в первом уравнении. Затем применяем шаги 1 , 2 и 3 ко второму уравнению полученной матрицы и т.д. Так как число уравнений системы конечно, то этот процесс завершится не более чем за m итераций.

Решение системы по этому алгоритму называется методом Жордана-Гаусса.

После того, как система приведена к базисному виду, находят базисное решение, соответствующее выбранному базису. Для этого переменные, не вошедшие в базис, приравнивают нулю, а остальные переменные (базисные) находят но правым частям соответствующих уравнений. Приведем решение типового примера задания 1: Найти базисное решение системы с расширенной матрицей

Помощь по математическому программированию онлайн

Применим алгоритм приведения матрицы к базисному виду: В первой строке элемент Помощь по математическому программированию онлайн, поэтому выберем его в качестве разрешающего. Теперь изменяем вторую и третью строки следующим образом: ко второй строке прибавляем первую, умноженную на (-2). к третьей прибавляем первую, умноженную на (-5). В результате получим матрицу

Помощь по математическому программированию онлайн

в которой переменная Помощь по математическому программированию онлайн стала базисной в первом уравнении. Теперь применяем шаги 1-3 ко второй строке полученной матрицы. Находим ненулевой элемент, например, Помощь по математическому программированию онлайн и делим вторую строку на этот элемент. Получим матрицу

Помощь по математическому программированию онлайн

Теперь делаем нули в остальных строках четвертого столбца этой матрицы, для чего к первой строке прибавляем вторую, умноженную на -1, к третьей прибавляем вторую, умноженную на -9. В результате расширенная матрица системы примет вид:

Помощь по математическому программированию онлайн

Вычеркивая нулевую третью строку, получим матрицу, в базисном виде:

Помощь по математическому программированию онлайн

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

Помощь по математическому программированию онлайн

или

Помощь по математическому программированию онлайн

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

Помощь по математическому программированию онлайн

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

Помощь по математическому программированию онлайн

(при этом из базиса выйдет Помощь по математическому программированию онлайн). Будем делать Помощь по математическому программированию онлайн базисной, например, в первой строке, т.е. в качестве разрешающего выберем элемент Помощь по математическому программированию онлайнПомощь по математическому программированию онлайн (помечен в последней матрице). Как и раньше, разделив первую строку на разрешающий элемент и прибавив ко второй строке полученную первую, умноженную на 2/3, приведем матрицу к новому базису:

Помощь по математическому программированию онлайн

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

Возможно эта страница вам будет полезна:

Предмет математическое программирование

Решение задачи математического программирования геометрическим методом

К оглавлению…

Общей задачей линейного программирования называется задача нахождения минимума (максимума) линейной функции

Помощь по математическому программированию онлайн

при ограничениях :

Помощь по математическому программированию онлайн

где Помощь по математическому программированию онлайн — заданные числа, Помощь по математическому программированию онлайн — неизвестные, Помощь по математическому программированию онлайн и в любом из ограничений вида (2) может встречаться любой из знаков Помощь по математическому программированию онлайн или Помощь по математическому программированию онлайн.

Если число неизвестных Помощь по математическому программированию онлайн, то задача (1) — (3) примет вид

Помощь по математическому программированию онлайн

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

При решении задачи (4) — (6) сначала строят так называемую допустимую область, т.е. множество точек Помощь по математическому программированию онлайн плоскости, координаты которых удовлетворяют всем ограничениям (5) и лежат в первой четверти координатной плоскости (ограничение (6)). Поскольку все ограничения (5) — линейные, то допустимая область будет представлять собой выпуклый многоугольник (конечный или бесконечный) или пустое множество.

Затем среди точек допустимой области находят оптимальную, т.е. такую точку Помощь по математическому программированию онлайн координаты которой Помощь по математическому программированию онлайн доставляют минимум (максимум) целевой функции Помощь по математическому программированию онлайн. Для этого по виду целевой функции (4) строят линию уровня функции Помощь по математическому программированию онлайн, соответствующую Помощь по математическому программированию онлайн, т.е. прямую Помощь по математическому программированию онлайн и находят градиент функции

Помощь по математическому программированию онлайн

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

Перемещая линию уровня Помощь по математическому программированию онлайн параллельно самой себе в направлении градиента Помощь по математическому программированию онлайн, находим последнюю точку допустимой области, которую она пересекает при таком движении. Очевидно, что это будет точка максимума. Перемещая линию уровня в противоположном направлении Помощь по математическому программированию онлайн, находим точку минимума. Поясним этот метод на конкретном примере.

Пример оформления заказа №1.

К оглавлению…

Геометрическим методом найти максимум и минимум функции Помощь по математическому программированию онлайн для Помощь по математическому программированию онлайн при заданных ограничениях

Помощь по математическому программированию онлайн

Решение:

Построим допустимую область. Для этого в системе координат Помощь по математическому программированию онлайн строим прямую Помощь по математическому программированию онлайн — границу первого ограничения. Затем определяем, в какой полуплоскости находятся точки Помощь по математическому программированию онлайн, для которых Помощь по математическому программированию онлайн. Для этого выбираем любую точку, например (0, 0), и проверяем, удовлетворяет ли она этому неравенству. Поскольку -0 + 0 = 0 < 4, то точки, для которых Помощь по математическому программированию онлайн лежат в той же полуплоскости, что и точка Помощь по математическому программированию онлайн, т.е. справа (ниже) от границы Помощь по математическому программированию онлайн.

Помощь по математическому программированию онлайн

Аналогично строятся остальные полуплоскости, соответствующие ограничениям Помощь по математическому программированию онлайн и Помощь по математическому программированию онлайн (ниже прямой Помощь по математическому программированию онлайн и выше прямой Помощь по математическому программированию онлайн). Множество точек, удовлетворяющих всем трем неравенствам, образуют треугольник Помощь по математическому программированию онлайн. Учитывая ограничение Помощь по математическому программированию онлайн и Помощь по математическому программированию онлайн, получаем допустимую область — четырехугольник Помощь по математическому программированию онлайн.

Проведем линию уровня Помощь по математическому программированию онлайн, соответствующую значению Помощь по математическому программированию онлайн, т.е. прямую Помощь по математическому программированию онлайн (для точек, лежащих на этой прямой, значение Помощь по математическому программированию онлайн). Она будет проходить через точку Помощь по математическому программированию онлайн перпендикулярно вектору Помощь по математическому программированию онлайн. Перемещая линию уровня в направлении градиента Помощь по математическому программированию онлайн т.е. в направлении возрастания Помощь по математическому программированию онлайн, находим последнюю точку допустимой области, которую линия уровня пересекает при этом движении (линия Помощь по математическому программированию онлайн). Это будет точка максимума. В нашем случае — это точка Помощь по математическому программированию онлайн, координаты которой можно найти, решив систему линейных уравнений Помощь по математическому программированию онлайн и Помощь по математическому программированию онлайн. Аналогично, двигая линию уровня в противоположном направлении до линии Помощь по математическому программированию онлайн, находим точку минимума — точку Помощь по математическому программированию онлайн. Таким образом,

Помощь по математическому программированию онлайн

Задача решена полностью.

Решение задачи математического программирования симплекс-методом

К оглавлению…

Задача линейного программирования (ЗЛГ1) (1) — (3) (см. задание 2) называется канонической, если все ограничения вида (2) являются уравнениями (равенствами), т.е. задачей линейного программирования в канонической форме называется задача:

Помощь по математическому программированию онлайн

при ограничениях :

Помощь по математическому программированию онлайн

Симплекс-метод является вычислительной процедурой, которая позволяет решить любую каноническую ЗЛП алгебраическим методом. Теоретической основой метода являются следующие два утверждения:

Теорема 1. Если ЗЛП имеет допустимые решения, то существует хотя бы одно базисное допустимое решение задачи.

Теорема 2. Если ЗЛП имеет конечное оптимальное решение, то хотя бы одно из оптимальных решений является базисным.

Напомним, что решение системы (2) называется допустимым, если оно удовлетворяет ограничениям (3). Таким образом, из теоремы 1 следует, что если не существует ни одного базисного допустимого решения системы (2), то эта система вообще не имеет допустимых решений, т.е. ограничения (2) — (3) являются несовместными. В случае если имеются допустимые решения системы 2, то теорема 2 утверждает, что оптимальное решение ЗЛП можно найти среди базисных допустимых решений этой системы, которых, как мы знаем, конечное число. Суть симплекс-метода и состоит в последовательном переборе базисных допустимых решений системы (2), начиная с некоторого начального, которое еще называют первоначальным опорным планом. Перебор осуществляется таким образом, чтобы каждое новое решение было лучше предыдущего (в смысле приближения к максимуму или минимуму целевой функции Помощь по математическому программированию онлайн).

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

Чтобы преобразовать ЗЛП к каноническому виду к правой части каждого ограничения-неравенства прибавляют или вычитают неотрицательную дополнительную переменную, например, ограничение

Помощь по математическому программированию онлайн

преобразуется в уравнение

Помощь по математическому программированию онлайн

прибавлением дополнительной переменной Помощь по математическому программированию онлайн, а неравенство вида

Помощь по математическому программированию онлайн

заменяется на уравнение

Помощь по математическому программированию онлайн

где Помощь по математическому программированию онлайн.

Заметим, что знак неравенства Помощь по математическому программированию онлайн можно заменить на Помощь по математическому программированию онлайн умножением всего неравенства на -1, например, неравенство Помощь по математическому программированию онлайн эквивалентно неравенству —Помощь по математическому программированию онлайн. Отметим также, что максимизацию целевой функции Помощь по математическому программированию онлайн можно заменить на минимизацию функции —Помощь по математическому программированию онлайн и наоборот, так как максимум функции

Помощь по математическому программированию онлайн

достигается в тех же точках, что и минимум функции

Помощь по математическому программированию онлайн

Мы приведем алгоритм симплекс-метода для минимизации целевой функции (1)

Помощь по математическому программированию онлайн

Поясним суть метода на следующем примере:

Пусть требуется решить следующую ЗЛП: Найти максимум функции

Помощь по математическому программированию онлайн

при ограничениях:

Помощь по математическому программированию онлайн

Приведем задачу к каноническому виду и заменим максимизацию целевой функции Помощь по математическому программированию онлайн на минимизацию функции Помощь по математическому программированию онлайн Получим следующую задачу.

Помощь по математическому программированию онлайн

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

Начнем с того, что проверим опорный план Помощь по математическому программированию онлайн на оптимальность. Поскольку целевая функция

Помощь по математическому программированию онлайн

выражена через свободные переменные Помощь по математическому программированию онлайн и Помощь по математическому программированию онлайн, коэффициенты при которых отрицательны, то, очевидно, увеличение этих переменных приведет к уменьшению значения целевой функции на 3 ед. при увеличении Помощь по математическому программированию онлайн на одну единицу и на 4 ед. при увеличении на одну единицу Помощь по математическому программированию онлайн (сейчас Помощь по математическому программированию онлайн и Помощь по математическому программированию онлайн равны 0 ). Поэтому делаем вывод, что опорный план Помощь по математическому программированию онлайн не является оптимальным (т.к. введение в базис переменных Помощь по математическому программированию онлайн и Помощь по математическому программированию онлайн приведёт к уменьшению значения целевой функции).

Итак, для того, чтобы получить лучшее базисное решение, мы должны включить в базис переменные Помощь по математическому программированию онлайн и Помощь по математическому программированию онлайн. Будем вводить их в базис по очереди. Поскольку увеличение переменной Помощь по математическому программированию онлайн быстрее уменьшает Помощь по математическому программированию онлайн, то выбираем переменную Помощь по математическому программированию онлайн для включения ее в базис (это разумно, но не обязательно). Теперь надо выяснить в какой строке системы (5) переменная Помощь по математическому программированию онлайн будет базисной, чтобы полученное новое базисное решение было допустимым.

Анализируя первое уравнение системы

Помощь по математическому программированию онлайн

замечаем, что поскольку Помощь по математическому программированию онлайн, то увеличение Помощь по математическому программированию онлайн влечет уменьшение Помощь по математическому программированию онлайн. Так как Помощь по математическому программированию онлайн ввиду (6), то увеличение Помощь по математическому программированию онлайн возможно лишь до тех пор, пока Помощь по математическому программированию онлайн не уменьшится до нуля, т.е. до значения 9/1 = 9. Поскольку переменная Помощь по математическому программированию онлайн есть также и во втором уравнении, то рассуждая аналогично, заключаем, что в этом случае переменную Помощь по математическому программированию онлайн можно увеличивать максимум до значения 8/2 = 4 при котором переменная Помощь по математическому программированию онлайн уменьшится до нуля.

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

Помощь по математическому программированию онлайн

Теперь повторим эту процедуру для нового опорного плана Помощь по математическому программированию онлайн. Для того, чтобы проверить его на оптимальность, нужно выразить целевую функцию через свободные переменные Помощь по математическому программированию онлайн и Помощь по математическому программированию онлайн этого плана, поскольку их нужно будет изменять, чтобы получить другое (лучшее) базисное решение. Для этого из второго уравнения последней системы выражаем базисную переменную

Помощь по математическому программированию онлайн

и подставляем ее в целевую функцию

Помощь по математическому программированию онлайн
Помощь по математическому программированию онлайн

Проводимые вычисления удобно оформлять в виде так называемых симплекс-таблиц, которые являются, фактически, расширенными матрицами системы ограничений (5) с добавленной Помощь по математическому программированию онлайн — строкой.

Исходная симплекс-таблица.

Помощь по математическому программированию онлайн

Опорный план

Помощь по математическому программированию онлайн

значение Помощь по математическому программированию онлайн равно Помощь по математическому программированию онлайн.

Помощь по математическому программированию онлайн

План

Помощь по математическому программированию онлайн

значение Помощь по математическому программированию онлайн равно Помощь по математическому программированию онлайн.

Последняя строка симплекс-таблицы называется Помощь по математическому программированию онлайн — строкой поскольку в ней расположены коэффициенты целевой функции Помощь по математическому программированию онлайн Заметим, что для того, чтобы выразить коэффициенты целевой функции через свободные переменные, достаточно преобразованиями Жордана — Гаусса сделать нули в базисных столбцах Помощь по математическому программированию онлайн — строки. При этом новое значение Помощь по математическому программированию онлайн автоматически появится в столбце «Значение» с противоположным знаком.

Поскольку в Помощь по математическому программированию онлайн — строке есть отрицательный коэффициент в первом столбце, то план Помощь по математическому программированию онлайн не оптимален, так как введение в базис свободной переменной уменьшает Помощь по математическому программированию онлайн (введение в базис свободной переменной Помощь по математическому программированию онлайн увеличивает Помощь по математическому программированию онлайн). Поэтому вводим в базис Помощь по математическому программированию онлайн, и первый столбец таблицы будет разрешающим. Чтобы выбрать разрешающую строку, как и раньше делим элементы столбца «Значение» на положительные элементы разрешающего столбца и находим минимальное частное:

Помощь по математическому программированию онлайн

которое достигается в первой строке, которая и будет разрешающей. Значит разрешающим элементом табл. 1 будет элемент Помощь по математическому программированию онлайн (выделим его прямоугольником). Теперь проведем обычные преобразования Жордана — Гаусса относительно этого элемента, т.е. сначала делим разрешающую строку на разрешающий элемент,

Помощь по математическому программированию онлайн

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

Помощь по математическому программированию онлайн

Новое базисное решение (план)

Помощь по математическому программированию онлайн

значение Помощь по математическому программированию онлайн равно Помощь по математическому программированию онлайн.

Просматривая Помощь по математическому программированию онлайн — строку, замечаем, что в ней нет отрицательных элементов. Это означает, что при попытке ввести в базис свободные переменные Помощь по математическому программированию онлайн или Помощь по математическому программированию онлайн целевая функция будет увеличиваться (на 2/5 и 9/5 единиц при увеличении на 1 единицу переменных Помощь по математическому программированию онлайн и Помощь по математическому программированию онлайн соответственно). Таким образом, других базисных решений, лучших чем Помощь по математическому программированию онлайн, (т.е. с меньшим, чем -18 значением Помощь по математическому программированию онлайн) не существует.

Решение

Помощь по математическому программированию онлайн

является оптимальным и

Помощь по математическому программированию онлайн

Решение исходной задачи:

Помощь по математическому программированию онлайн

Обобщая приведенные выше рассуждения, сформулируем

Алгоритм Симплекс-метода

Исходные данные: задача в канонической форме; целевая функция минимизируется; найдено начальное базисное допустимое решение (опорный план), то есть система уравнений (2) имеет базис и все правые части уравнений Помощь по математическому программированию онлайн 0 — неотрицательны; целевая функция выражена через свободные переменные.

При выполнении этих условий каждая итерация метода состоит из трех шагов:

Шаг 1. Имеющийся план проверяется на оптимальность. Если в Помощь по математическому программированию онлайн— строке нет отрицательных элементов, то имеющийся план оптимален и задача решена. Если отрицательные элементы есть, то план не оптимален. Выбираем любой отрицательный элемент Помощь по математическому программированию онлайн — строки (как правило, максимальный по модулю) и считаем столбец, в котором он находится в качестве разрешающего. Пусть для определенности это столбец переменной Помощь по математическому программированию онлайн.

Шаг 2. Выбор разрешающей строки. Пусть разрешающий столбец, выбранный на предыдущем шаге, это столбец переменной Помощь по математическому программированию онлайн. Для каждой Помощь по математическому программированию онлайн-й строки Помощь по математическому программированию онлайн делим элементы столбца свободных членов «Значение» (напомним, что все они неотрицательные) на положительные_элементы разрешающего столбца, стоящие в этой строке, и находим минимальное из полученных частных, т.е. находим

Помощь по математическому программированию онлайн

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

Шаг 3. Пересчет таблицы. Преобразованиями Жордана-Гаусса пересчитываем таблицу относительно разрешающего элемента Помощь по математическому программированию онлайн, найденного на предыдущем шаге, для чего:

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

3.2. Ко всем остальным строкам таблицы (включая Помощь по математическому программированию онлайн — строку) прибавляем полученную разрешающую, умноженную на элемент Помощь по математическому программированию онлайн, где Помощь по математическому программированию онлайн-номер изменяемой строки Помощь по математическому программированию онлайн. К Помощь по математическому программированию онлайн-строке прибавляем разрешающую строку, умноженную на Помощь по математическому программированию онлайн. Иначе говоря, элементы новой таблицы (со штрихом) вычисляю гея по формулам:

Помощь по математическому программированию онлайн

В результате этих преобразований в столбце xs везде будут стоять нули кроме Помощь по математическому программированию онлайн-строки, где будет 1, т.е. Помощь по математическому программированию онлайн будет новой базисной переменной, целевая функция будет выражена через новые свободные переменные, новый план Помощь по математическому программированию онлайн находится в столбце «Значение» и лучше предыдущего, так как значение целевой функции для нового плана равно Помощь по математическому программированию онлайн. Переходим к шагу 1 и повторяем всю процедуру для нового плана Помощь по математическому программированию онлайн.

Поскольку базисных решений системы (2) конечное число, а каждое новое базисное решение лучше предыдущего, то этот процесс завершится за конечное число шагов.

Решение задачи линейного программирования в общем случае. Рассмотрим следующую задачу ЛП:

Помощь по математическому программированию онлайн

Приведем ее к каноническому виду введением трех неотрицательных переменных Помощь по математическому программированию онлайн. Получим задачу:

Помощь по математическому программированию онлайн

При попытке решить эту задачу симплекс-методом возникает определенная трудность, связанная с тем, что нет очевидного начального базисного допустимого решения (опорного плана), так как переменные Помощь по математическому программированию онлайн и Помощь по математическому программированию онлайн не являются базисными. Умножение первых двух уравнений на -1 также ничего не дает, поскольку соответствующее базисное решение (0, 0, -2, -5, 10) не будет допустимым. Пытаться просто перебирать базисные решения в попытке отыскать допустимое, нецелесообразно, так как неясно, имеет ли эта задача вообще допустимые решения.

Для решения проблемы применим метод искусственного базиса. Введем в первые два уравнения (третье не создает проблем) искусственные переменные Помощь по математическому программированию онлайн и Помощь по математическому программированию онлайн. В результате получим базис из переменных Помощь по математическому программированию онлайн.

Помощь по математическому программированию онлайн

Соответствующее базисное решение Помощь по математическому программированию онлайн = (0, 0, 0, 0, 10, 2, 5) является допустимым для ограничений (8). Однако ограничения (7) и (8) не являются эквивалентными в том смысле, что любому допустимому решению системы ограничений (8), в котором хотя бы одна искусственная переменная отлична от нуля, нельзя поставить в соответствие допустимое решение системы ограничений (7). С целью исключения искусственных переменных из базисного решения системы ограничений (8), т.е. для получения допустимого базисного решения системы ограничений (7), используем алгоритм симплекс-метода. Для того, чтобы искусственные переменные стали свободными, необходимо, чтобы они были равны нулю (сейчас Помощь по математическому программированию онлайн). Поэтому введем искусственную целевую функцию

Помощь по математическому программированию онлайн

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

Таким образом, задача разбивается на два этапа. На первом этапе минимизируется искусственная целевая функция Помощь по математическому программированию онлайн. Этот этап закончится либо нахождением опорного плана исходной задачи (7), либо тем, что минимизировать функцию Помощь по математическому программированию онлайн до нуля не удастся, т.е. допустимых планов нет, а значит (ввиду теоремы 1) и нет вообще допустимых решений задачи.

Если опорный план найдется, то на втором этапе решаем задачу симплекс-методом. Проиллюстрируем описанный выше метод искусственного базиса, применив его к решению задачи (7).

Этан 1. Составим исходную симплекс-таблицу для задачи (8). Все вычисления будем проводить также и для целевой функции Помощь по математическому программированию онлайн. Тогда после завершения первого этапа получим целевую функцию Помощь по математическому программированию онлайн, выраженную через свободные переменные.

Помощь по математическому программированию онлайн

Для того, чтобы начать минимизацию функции Помощь по математическому программированию онлайн, ее надо выразить через свободные переменные. Для этого, из Помощь по математическому программированию онлайн — строки вычтем первую и вторую строки. Получим

Помощь по математическому программированию онлайн

Так как в Помощь по математическому программированию онлайн — строке есть отрицательные элементы, то выбираем в качестве разрешающего любой из первых двух столбцов, например первый. Поскольку

Помощь по математическому программированию онлайн

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

Помощь по математическому программированию онлайн

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

Помощь по математическому программированию онлайн

Этап 1 успешно завершен, так как искусственные переменные выведены из базиса и мы получили опорный план Помощь по математическому программированию онлайн = (3, 4, 0, 0, 3 ) исходной задачи (7), к которому можно применить алгоритм симплекс-метода. На втором этапе Помощь по математическому программированию онлайн — строка уже не нужна и мы ее вычеркиваем.

Этап 2.

Помощь по математическому программированию онлайн

Целевую функцию Помощь по математическому программированию онлайн можно уменьшить (сейчас Помощь по математическому программированию онлайн = -5) если ввести в базис Помощь по математическому программированию онлайн или Помощь по математическому программированию онлайн.

Выбираем третий столбец в качестве разрешающего, т.к. -5/3 < -1/3. Разрешающей строкой будет третья, т.к. только в ней есть положительный элемент разрешающего столбца. Разрешающий элемент Помощь по математическому программированию онлайн. Пересчитывая таблицу, получим:

Помощь по математическому программированию онлайн

Поскольку в Помощь по математическому программированию онлайн — строке таблицы 4 нет отрицательных элементов, то новый план Помощь по математическому программированию онлайн является оптимальным и Помощь по математическому программированию онлайн.

Задача решена полностью.

Двойственность в математическом программировании. Двойственный симплекс-метод

К оглавлению…

Рассмотрим задачу линейного программирования в общей форме:

Помощь по математическому программированию онлайн

при ограничениях:

Помощь по математическому программированию онлайн

Каждому Помощь по математическому программированию онлайн-му ограничению из (2) соответствует переменная Помощь по математическому программированию онлайн так называемой двойственной задачи к задаче (1) — (3) (показана слева от соответствующего ограничения).

Двойственная задача имеет вид:

Помощь по математическому программированию онлайн
Помощь по математическому программированию онлайн

Задачи (1) — (3) и (4) — (6) образуют пару задач, называемую в линейном программировании двойственной парой.

Сравнивая две задачи, видим, что двойственная задача по отношению к исходной (прямой) содержит те же самые коэффициенты a,j, b„ Cj и составляется согласно следующим правилам:

  • Целевая функция (1) исходной задачи задается на максимум, а целевая функция (4) двойственной задачи — на минимум.
  • Матрица Помощь по математическому программированию онлайн, составленная из коэффициентов при неизвестных в системе ограничений (5) двойственной задачи получается из матрицы Помощь по математическому программированию онлайн прямой задачи транспонированием (т.е. заменой строк столбцами):
Помощь по математическому программированию онлайн
  • Число переменных в двойственной задаче (4)-(6) равно числу ограничений в системе (2) прямой задачи, а число ограничений в системе (5) двойственной задачи равно числу переменных в прямой задаче.
  • Коэффициентами при неизвестных в целевой функции (4) двойственной задачи являются свободные члены в системе (2) прямой задачи и наоборот.
  • Если переменная Помощь по математическому программированию онлайн, то Помощь по математическому программированию онлайн-е ограничение в системе (5) двойственной задачи является неравенством » Помощь по математическому программированию онлайн «. Если же переменная Помощь по математическому программированию онлайн может иметь любой знак, то Помощь по математическому программированию онлайн-е ограничение в системе (5) представляет собой уравнение.

Каждая из задач двойственной пары (1) — (3) и (4) — (6) фактически является самостоятельной задачей линейного программирования и может быть решена независимо одна от другой. Однако при определении симплексным методом оптимального плана одной из задач, тем самым находится решение и другой задачи. Существующие зависимости между решениями прямой и двойственной задач характеризуются сформулированными ниже теоремами двойственности.

Теорема 1. (Основная теорема двойственности). Если одна из пары двойственных задач имеет оптимальный план, то и другая имеет оптимальный план причем значения целевых функций задач при их оптимальных планах совпадают, т.е. Помощь по математическому программированию онлайн

Если же целевая функция одной из задач не ограничена (для исходной (1) — (3) — сверху, для двойственной (4) — (6) — снизу), то другая задача вообще не имеет допустимых решений.

Теорема 2. (Вторая теорема двойственности). Для того, что бы два допустимых решения

Помощь по математическому программированию онлайн

пары двойственных задач были их оптимальными решениями, необходимо и достаточно, чтобы они удовлетворяли системам уравнений:

Помощь по математическому программированию онлайн

Замечание. Соотношения (7) верны только для ограничений в виде неравенств и для неотрицательных переменных.

Двойственный симплекс-метод, как и симплекс-метод, используется при нахождении решения задачи линейного программирования, записанной в канонической форме. Вместе с тем двойственный симплекс-метод можно применять при решении задачи ЛП, свободные члены системы ограничений которой могут быть любыми числами (при решении задачи симплексным методом эти числа предполагались неотрицательными).

Опишем алгоритм двойственного симплекс-метода. Рассмотрим задачу линейного программирования в канонической форме.

Помощь по математическому программированию онлайн

Пусть матрица ограничений Помощь по математическому программированию онлайн содержит единичную подматрицу порядка Помощь по математическому программированию онлайн и первые Помощь по математическому программированию онлайн переменных Помощь по математическому программированию онлайн являются базисными. Среди чисел Помощь по математическому программированию онлайн есть отрицательные. Вектор Помощь по математическому программированию онлайн есть решение системы (9). Однако, это решение не является планом задачи (8) — (10), поскольку среди его компонент есть отрицательные числе (т.е. не выполняются ограничения (10)). Исключим базисные переменные из целевой функции Помощь по математическому программированию онлайн:

Помощь по математическому программированию онлайн

Предположим, что

Помощь по математическому программированию онлайн

Шаг 1. Составить исходную симплексную таблицу.

Помощь по математическому программированию онлайн

IIIаг 2. Выяснить, имеется ли хотя бы одно отрицательное число среди элементов столбца Помощь по математическому программированию онлайн. Если нет, то перейти к шагу 8. Иначе — к шагу 3.

Шаг 3. Если отрицательных чисел в столбце Помощь по математическому программированию онлайн несколько, то выбрать наименьшее. Пусть, для определенности, это число

Помощь по математическому программированию онлайн

Строка с номером Помощь по математическому программированию онлайн — ведущая.

Шаг 4. Среди элементов Помощь по математическому программированию онлайн ведущей строки Помощь по математическому программированию онлайн находят отрицательные. Если таковых нет, то исходная задача не имеет решения. В противном случае перейти к шагу 5.

Шаг 5. Вычислить

Помощь по математическому программированию онлайн

Столбец с номером Помощь по математическому программированию онлайн — ведущий, Помощь по математическому программированию онлайн — ведущий элемент.

Шаг 6. С помощью ведущего элемента Помощь по математическому программированию онлайн провести одну итерацию метода Жордана-Гаусса.

Шаг 7. Построить новую симплексную таблицу и перейти к шагу 2.

Шаг 8. Задача линейного программирования (8) — (10) решена. По последней симплексной таблице выписать оптимальный план и минимальное значение целевой функции задачи (8) — (10).

Замечание. Если среди чисел Помощь по математическому программированию онлайн есть отрицательные,

то следует в системе ограничений (9) преобразовать свободные члены Помощь по математическому программированию онлайн в неотрицательные, умножив на (-1) строки, содержащие отрицательные свободные члены и решать задачу (8) — (10) методом искусственного базиса.

Пример оформления заказа №2.

К оглавлению…

Решить задачу математического программирования:

Помощь по математическому программированию онлайн

Решение:

Составим для задачи (11) двойственную:

Помощь по математическому программированию онлайн

Для решения задачи (11) двойственным симплекс-методом приведем ее к каноническому виду. Для этого умножим первое и второе ограничения на (-1) и добавим соответственно неотрицательные дополнительные переменные Помощь по математическому программированию онлайн:

Помощь по математическому программированию онлайн

Базисными переменными здесь являются переменные Помощь по математическому программированию онлайн и Помощь по математическому программированию онлайн. Поскольку все коэффициенты Помощь по математическому программированию онлайн, то критерий оптимальности для этого базисного решения выполнен, однако само решение Помощь по математическому программированию онлайн = (0, 0, 0, -2, -1) содержит отрицательные переменные, то есть не является допустимым. Естественно попытаться вывести отрицательные (не являющиеся допустимыми) переменные из базиса, сохранив при этом неотрицательность коэффициентов целевой функции, так как в этом случае полученное допустимое решение будет являться и оптимальным. Такой подход является содержанием двойственного симплекс-метода. Проиллюстрируем его на примере решения задачи (13).

Составим исходную симплекс-таблицу.

Помощь по математическому программированию онлайн

Вычисляем

Помощь по математическому программированию онлайн

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

Помощь по математическому программированию онлайн

Определяем

Помощь по математическому программированию онлайн

Столбец, в котором достигается этот минимум, соответствует переменнойПомощь по математическому программированию онлайн.

Этот столбец является разрешающим и разрешающим элементом является элемент Помощь по математическому программированию онлайн. Это делается для того, чтобы элементы последней строки остались неотрицательными. Проводим одну итерацию метода Жордана-Гаусса относительно этого элемента, т.е. из базиса исключаем переменную Помощь по математическому программированию онлайн и включаем в базис переменную Помощь по математическому программированию онлайн. Новая симплекс-таблица имеет вид:

Помощь по математическому программированию онлайн

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

Помощь по математическому программированию онлайн

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

Помощь по математическому программированию онлайн

Среди элементов столбца ‘Значение» нет отрицательных чисел. В Помощь по математическому программированию онлайн-строке также нет отрицательных чисел. Следовательно, найден оптимальный план: Помощь по математическому программированию онлайн, при этом Помощь по математическому программированию онлайн. По последней симплекс-таблице находим решение двойственной задачи (12). Для этого выясняем, какие переменные задачи (11) входили в исходный базис. В первоначальной таблице это — Помощь по математическому программированию онлайн. В последней симплекс-таблице находим элементы Помощь по математическому программированию онлайн — строки, соответствующие этим базисным переменным Помощь по математическому программированию онлайн и прибавляем к ним соответствующие коэффициенты исходной целевой функции Помощь по математическому программированию онлайн. В результате получаем

Помощь по математическому программированию онлайн

Транспортная задача

К оглавлению…

Общая постановка транспортной задачи состоит в определении оптимального плана перевозок некоторого однородного груза из Помощь по математическому программированию онлайн пунктов отправления Помощь по математическому программированию онлайн в Помощь по математическому программированию онлайн пунктов назначения Помощь по математическому программированию онлайн. При этом в качестве критерия оптимальности берется либо минимальная стоимость перевозок всего груза, либо минимальное время его доставки.

Математическая модель транспортной задачи имеет вид:

Помощь по математическому программированию онлайн

Здесь Помощь по математическому программированию онлайн — тарифы перевозки единицы груза из Помощь по математическому программированию онлайн-гo пункта отправления Помощь по математическому программированию онлайн в Помощь по математическому программированию онлайн-й пункт назначения Помощь по математическому программированию онлайн — потребность в грузе в Помощь по математическому программированию онлайн-м пункте назначения, Помощь по математическому программированию онлайн-запасы груза в Помощь по математическому программированию онлайн-м пункте отправления.

Наличие линейных уравнений (15) и (16) обеспечивает доставку необходимого количества груза в каждый из пунктов назначения и вывоз всего имеющегося груза из всех пунктов отправления. При этом, ввиду (17), исключаются обратные перевозки. Задача (14) — (17) является частным случаем задачи линейного программирования, однако, в силу своей специфики решается специальным методом. Если выполняется гак называемое условие баланса то такая транспортная задача называется закрытой. Если условие баланса (18) не выполняется, то задача называется открытой.

Помощь по математическому программированию онлайн

Теорема 1. Для разрешимости транспортной задачи необходимо и достаточно, чтобы выполнялось условие баланса (18).

Если

Помощь по математическому программированию онлайн

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

Помощь по математическому программированию онлайн

и соответствующие тарифы полагают равными нулю, т.е.

Помощь по математическому программированию онлайн

Аналогично, при

Помощь по математическому программированию онлайн

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

Помощь по математическому программированию онлайн

при этом тарифы на перевозку из этого пункта также полагают равными нулю,

Помощь по математическому программированию онлайн

Для решения задачи (14) — (17) применяется метод потенциалов, который по существу, является другой формой симплекс-метода.

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

Помощь по математическому программированию онлайн

Построение начального опорного плана. Система ограничений (15)-(16) содержит Помощь по математическому программированию онлайн неизвестных и Помощь по математическому программированию онлайн уравнений, связанных отношением (18). Невырожденный опорный план задачи содержит Помощь по математическому программированию онлайн положительных перевозок или компонент. Таким образом, если каким-либо способом получен невырожденный опорный план задачи, то в матрице Помощь по математическому программированию онлайн значений его компонент положительными являются только Помощь по математическому программированию онлайн, а остальные равны нулю.

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

Для построения начального опорного плана применим метод минимальной стоимости.

Выбираем клетку с минимальной стоимостью (если их несколько, возьмем любую из них). Пусть, например,

Помощь по математическому программированию онлайн

Тогда в клетку Помощь по математическому программированию онлайн записывают число

Помощь по математическому программированию онлайн

При этом, если

Помощь по математическому программированию онлайн

то значение Помощь по математическому программированию онлайн уменьшают на Помощь по математическому программированию онлайн и «закрывают» строку с номером Помощь по математическому программированию онлайн, так как ресурсы Помощь по математическому программированию онлайн-го поставщика исчерпаны. Если

Помощь по математическому программированию онлайн

то значение Помощь по математическому программированию онлайн уменьшают на Помощь по математическому программированию онлайн и «закрывают» столбец с номером Помощь по математическому программированию онлайн, что означает удовлетворение спроса Помощь по математическому программированию онлайн-го потребителя. Если же Помощь по математическому программированию онлайн, то «закрывают» строку или столбец по выбору.

Вышеописанную процедуру повторяют для оставшейся транспортной таблицы до тех пор, пока не будут закрыты все строки и столбцы.

Построение системы потенциалов. Система потенциалов строится для невырожденного опорного плана и имеет вид:

Помощь по математическому программированию онлайн

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

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

  • Проверка опорного плана на оптимальность. Для каждой свободной клетки вычисляют оценки
Помощь по математическому программированию онлайн

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

  • Построение цикла и нахождение нового опорного плана. Среди отрицательных оценок выбираем наименьшую. Пусть
Помощь по математическому программированию онлайн

В клетке Помощь по математическому программированию онлайн нарушено условие оптимальности. Для улучшения опорного плана необходимо в клетку Помощь по математическому программированию онлайн отправить некоторое количество груза, превратив ее тем самым в базисную. Эта операция эквивалентна действию по замене базиса в симплекс-методе.

Клетку Помощь по математическому программированию онлайн отмечают знаком «+» и затем строят цикл, расставляя поочередно знаки «-» и «+» в базисных клетках так, чтобы в строках и столбцах стояло по одному знаку «+» иди «-». Цикл строится единственным образом.

Обозначим Помощь по математическому программированию онлайн, где Помощь по математическому программированию онлайн — перевозки, стоящие в вершинах цикла, отмеченных знаком «-». Величина Помощь по математическому программированию онлайн определяет количество груза, которое можно перераспределить по найденному циклу. Значение Помощь по математическому программированию онлайн записывают в незанятую клетку Помощь по математическому программированию онлайн. Двигаясь по циклу, вычитают или прибавляют Помощь по математическому программированию онлайн к объемам перевозок, расположенных в клетках, помеченными знаками «-» или «+» соответственно. Перевозки в остальных базисных клетках остаются без изменения. Переходим к построению системы по тенциалов.

Замечание. Если условие баланса нарушено, т.е.

Помощь по математическому программированию онлайн

то вводят фиктивного поставщика

Помощь по математическому программированию онлайн

или потребителя

Помощь по математическому программированию онлайн

с потребностью

Помощь по математическому программированию онлайн

или поставкой

Помощь по математическому программированию онлайн

соответственно. Стоимости соответствующих перевозок полагаются равными нулю. При построении начального опорного плана в этом случае фиктивные клетки заполняются в последнюю очередь.

Пример. Компания контролирует 3 фабрики, производительность которых в неделю (в тыс. изделий) задается вектором

Помощь по математическому программированию онлайн

Компания заключила договоры с четырьмя заказчиками, еженедельные потребности которых (в тыс.изделий) задаются вектором

Помощь по математическому программированию онлайн

Стоимость транспортировки 1 тыс. изделий с Помощь по математическому программированию онлайн-й фабрики Помощь по математическому программированию онлайн-му заказчику задается матрицей тарифов

Помощь по математическому программированию онлайн

Требуется определить оптимальный план перевозок с целью минимизации суммарных затрат на транспортировку.

Так как

Помощь по математическому программированию онлайн

то введем в рассмотрение фиктивного 5-го заказчика с потребностью в

Помощь по математическому программированию онлайн

(тыс. ед.) груза. При этом положим

Помощь по математическому программированию онлайн

Исходные данные запишем в виде таблицы.

Помощь по математическому программированию онлайн

Построим начальный опорный план методом минимального элемента. Первой заполним клетку (1, 3) т. к. тариф этой клетки Помощь по математическому программированию онлайн меньше других тарифов (фиктивный столбец заполняется в последнюю очередь). Поставка для «легки (1,3) будет равна Помощь по математическому программированию онлайн. Записываем это число в верхний левый угол клетки. Это означает, что с первой фабрики третьему заказчику апанируется поставить 25 тыс. ед. груза. При этом требования 3-го заказчика будут полностью удовлетворены и мы закрываем 3-й столбец. Затем в оставшейся части таблицы (без 3-го столбца) ищем клетку с минимальным тарифом. Таких клеток две (1, 1) и (2, 4). Заполняем любую из них, например, клетку (1, 1). Остаток продукции 1-й фабрики равен 30 -25 = 5. Поэтому записать в клетку (1,1) можно

Помощь по математическому программированию онлайн

Поскольку с первой фабрики вывезен весь груз (30 тыс. ед.), то закрываем первую строку. Далее поступаем аналогично, заполняя свободные клетки в порядке возрастания тарифов, закрывая каждый раз нужные строку или столбец. В результате начальный план имеет вид (см. табл.1):

Помощь по математическому программированию онлайн

Проверим этот план на оптимальность. Для этого найдем потенциалы Помощь по математическому программированию онлайн и Помощь по математическому программированию онлайнпоставщиков и потребителей. Для этого по запятым клеткам составим систему уравнений вида Помощь по математическому программированию онлайн:

Помощь по математическому программированию онлайн

Поскольку уравнений в системе столько же, сколько занятых клеток, то есть 7, а неизвестных — 8, то система имеет бесконечное множество решений. Положим, например, Помощь по математическому программированию онлайн. Тогда остальные потенциалы находятся однозначно:

Помощь по математическому программированию онлайн
Помощь по математическому программированию онлайн

Теперь вычисляем оценки Помощь по математическому программированию онлайн свободных клеток по формуле

Помощь по математическому программированию онлайн

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

Для этого построим для клетки (3, 3) цикл с вершинами в загруженных клетках (см. табл. 1), расставляя поочередно в вершинах, начиная с клетки (3, 3), знаки «+» и « — ». Из поставок в клетках, помеченных знаком «минус», выбираем наименьшую:

Помощь по математическому программированию онлайн

Для получения нового опорного плана изменим поставки в вершинах цикла: к поставкам в клетках, помеченных знаком «+», прибавляем величину Помощь по математическому программированию онлайн, в клетках, помеченных знаком «-», вычитаем эту величину 15. Новый опорный план поместим в табл. 2.

Помощь по математическому программированию онлайн

Исследование этого плана на оптимальность аналогично предыдущему. Вычисленные значения потенциалов записаны справа и снизу таблицы, а оценки Помощь по математическому программированию онлайн свободных клеток поместим в левых нижних углах этих клеток. Поскольку среди оценок нет отрицательных, то найденный план является оптимальным. Выписываем матрицу Помощь по математическому программированию онлайн (без последнего столбца):

Помощь по математическому программированию онлайн

Минимальные суммарные затраты по оптимальному плану составляют:

Помощь по математическому программированию онлайн

Из таблицы 2 видно, что избыточная продукция в количестве 10 тыс. изд. остается на третьей фабрике.

Задача о максимальном потоке в сети

К оглавлению…

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

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

Помощь по математическому программированию онлайн

Неотрицательная величина v называется величиной потока в сети. Ограничения (19), (20) означают, что суммарная величина Помощь по математическому программированию онлайн потока, выходящего из источника Помощь по математическому программированию онлайн, равна суммарной величине Помощь по математическому программированию онлайн потока, входящего в сток Помощь по математическому программированию онлайн. Ограничения (21) выражают тот факт, что в каждую вершину (кроме источника и стока) приходит столько потока, сколько из нее уходит. Если для дуги Помощь по математическому программированию онлайн имеем Помощь по математическому программированию онлайн, то дуга Помощь по математическому программированию онлайн называется насыщенной потоком.

Итак, задача нахождения максимального потока является задачей линейного программирования с целевой функцией

Помощь по математическому программированию онлайн

и ограничениями (19) — (22). В силу своей специфики для ее решения существует более эффективный алгоритм, чем симплекс-метод.

Разобьем множество вершин Помощь по математическому программированию онлайн сети Помощь по математическому программированию онлайнна два непересекающихся подмножества Помощь по математическому программированию онлайн и Помощь по математическому программированию онлайн

Помощь по математическому программированию онлайн

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

Помощь по математическому программированию онлайн

либо

Помощь по математическому программированию онлайн

Т.е. разрез — это множество всех дуг, концевые вершины которых принадлежат разным множествам:

Помощь по математическому программированию онлайн и Помощь по математическому программированию онлайн. При этом положим

Помощь по математическому программированию онлайн

Тогда мы получим разрез, отделяющий источник Помощь по математическому программированию онлайн от стока Помощь по математическому программированию онлайн. Если удалить все дуги некоторого разреза, отделяющего источник Помощь по математическому программированию онлайн от стока Помощь по математическому программированию онлайн, то на сети не останется пути ведущего из Помощь по математическому программированию онлайн в Помощь по математическому программированию онлайн.

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

Помощь по математическому программированию онлайн

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

Теорема (о максимальном потоке и минимальном разрезе). В любой сети величина максимального потока из источника Помощь по математическому программированию онлайн в сток Помощь по математическому программированию онлайн равна пропускной способности минимального разреза.

Пусть на сети имеется некоторый поток, который не является максимальным. Покажем, как найти путь, увеличивающий этот поток.

Алгоритм расстановки пометок нахождения увеличивающего пути

IIIаг 1. Источник Помощь по математическому программированию онлайн получает метку Помощь по математическому программированию онлайн.

Шаг 2. Для всех дуг Помощь по математическому программированию онлайн выходящих из вершины s, соответствующие вершины Помощь по математическому программированию онлайн получают метку Помощь по математическому программированию онлайн если Помощь по математическому программированию онлайн. Для дуг Помощь по математическому программированию онлайн, входящих в вершину Помощь по математическому программированию онлайн, соответствующие вершины Помощь по математическому программированию онлайн получают метку Помощь по математическому программированию онлайн, если Помощь по математическому программированию онлайн.

Шаг 3. Просматриваем все вершины, помеченные на Помощь по математическому программированию онлайн— м шаге. Для каждой такой вершины Помощь по математическому программированию онлайн, соответствующие им вершины Помощь по математическому программированию онлайн, для которых Помощь по математическому программированию онлайн, получают метку Помощь по математическому программированию онлайн, для всех дуг Помощь по математическому программированию онлайн, входящих в вершину Помощь по математическому программированию онлайн, соответствующих им вершины Помощь по математическому программированию онлайн, для которых Помощь по математическому программированию онлайн, получают метку Помощь по математическому программированию онлайн.

Алгоритм заканчивает работу одним из двух состояний: а) после некоторого шага мы не можем пометить ни одной вершины, и сток Помощь по математическому программированию онлайн остался непомеченным. Это означает, что имеющийся поток является максимальным, а Помощь по математическому программированию онлайн, где Помощь по математическому программированию онлайн -множество помеченных, Помощь по математическому программированию онлайн — множество непомеченных вершин, образует минимальный разрез; б) сток l оказался помеченным. Двигаясь от стока Помощь по математическому программированию онлайн к вершине, номер которой указан в ее метке и т.д., мы придем к источнику.

Алгоритм Форда — построения максимального потока в сети

Начальный. Выбираем некоторый поток Помощь по математическому программированию онлайн в сети Помощь по математическому программированию онлайн (например Помощь по математическому программированию онлайн для всех дуг Помощь по математическому программированию онлайн.

Общая итерация 1. Применяем алгоритм нахождения увеличивающего пути из источника Помощь по математическому программированию онлайн в сток Помощь по математическому программированию онлайн. Если такого пути нет, то построенный поток является максимальным. Алгоритм заканчивает работу. Если увеличивающий путь найден, то переходим к 2.

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

Полагаем

Помощь по математическому программированию онлайн

Увеличиваем поток вдоль пути Помощь по математическому программированию онлайн на величину Помощь по математическому программированию онлайн, полагая

Помощь по математическому программированию онлайн

Переходим к 1.

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

Помощь по математическому программированию онлайн

Найдем увеличивающий путь.

Общая итерация: Шаг 1. Источник Помощь по математическому программированию онлайн получает пометку Помощь по математическому программированию онлайн. Шаг 2. Так как

Помощь по математическому программированию онлайн

то вершина 1 получает метку Помощь по математическому программированию онлайн. Вершина 2 получает метку Помощь по математическому программированию онлайн, т.к. Помощь по математическому программированию онлайн. Вершина 5 не может быть помечена, т.к. Помощь по математическому программированию онлайн (дуга (Помощь по математическому программированию онлайн, 5) — насыщенная).

Шаг 3. Соседними вершинами с вновь помеченными являются вершины 3 и 4. Вершина 3 помечена не может быть, так как Помощь по математическому программированию онлайн.Вершина 4 получает пометку (2), т.к. Помощь по математическому программированию онлайн.

Шаг 4. Соседними с помеченной вершиной 4 являются вершины Помощь по математическому программированию онлайн и 5. Вершина Помощь по математическому программированию онлайн помечена не может быть, т.к. Помощь по математическому программированию онлайн. Вершина 5 получает пометку (4′), т.к. Помощь по математическому программированию онлайн.

Шаг 5. Помечаем вершину Помощь по математическому программированию онлайн с меткой Помощь по математическому программированию онлайнУвеличивающий путь: Помощь по математическому программированию онлайн, причем на этом пути дуга Помощь по математическому программированию онлайн является прямой, а дуги Помощь по математическому программированию онлайн обратными. Увеличим поток вдоль этого пути по формулам (23). Находим

Помощь по математическому программированию онлайн
Помощь по математическому программированию онлайн

Полагаем

Помощь по математическому программированию онлайн

Величина суммарного потока в сети равна 3. Общая итерация 1. Для нового потока ищем увеличивающий путь методом расстановки пометок. Пометать удается только вершины Помощь по математическому программированию онлайн и 1. Следовательно, увеличивающего пути нет, и построенный поток является максимальным. Минимальный разрез Помощь по математическому программированию онлайн, где

Помощь по математическому программированию онлайн
Помощь по математическому программированию онлайн

состоит из дуг

Помощь по математическому программированию онлайн

и обладает пропускной способностью

Помощь по математическому программированию онлайн

На рис. 2 минимальный разрез показан пунктирной линией.

Помощь по математическому программированию онлайн

Сетевое планирование

К оглавлению…

Основой методов сетевого планирования является сетевая модель (сетевой график), отражающая логическую взаимосвязь работ, входящий в некоторый комплекс, что позволяет осуществлять управление ходом выполнения этих работ.

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

Полученные данные удобно заносить в таблицу. В табл. 1 приведены данные для проекта, состоящего из девяти работ.

Помощь по математическому программированию онлайн

На основании данных, приведенных в таблице, строится график комплекса работ, входящих в проект. Каждая работа изображается в виде ориентированного отрезка (дуги). Связи между работами изображаются пунктирными линиями (дуги-связи). В результате получается сетевой график (начальная вершина дуги — начало, а конечная — завершение соответствующей работы):

Помощь по математическому программированию онлайн

Предварительно следует упростить полученную сеть. Можно удалить некоторые дуги-связи, а начало и конец удаляемой дуги объединить в одну вершину. На рис. 2 изображена сеть, полученная после упрощения сети, изображенной на рис. 1.

Помощь по математическому программированию онлайн

В сетевом графике каждая вершина является конечной для некоторых дуг(операций), входящих в нее или начальной для дуг (операций) из нее выходящих. Поэтому каждая вершина может трактоваться как событие, означающее завершение всех операций (дуг), для которых она является конечной и возможность начала выполнения всех операций (дух), для которых она является начальной. Начальной вершине соответствует событие, под которым подразумевается начало осуществления проекта, а конечной вершине соответствует событие — завершения выполнения всего комплекса работ.

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

Алгоритм правильной нумерации

Шаг 1. Нумеруем начальную вершину номером 1. Переходим к шагу 2.

Шаг 2. Удаляем из сети все выходящие из пронумерованных вершин дуги. Нумеруем в произвольном порядке вершины, в которые не входит ни одна дуга, произвольным образом возрастающими по порядку номерами. Шаг 2 проделываем до тех пор, пока не дойдем до конечной вершины, которой присваиваем следующий по порядку номер.

В результате правильной нумерации вершин сетевой график, приведенный на рис. 2 примет вид

Помощь по математическому программированию онлайн

Номера работ на дугах соответственно заменены продолжительностью их выполнения (продолжительность фиктивной работы соответствующей дуги-связи полагаем равной 0).

Рассмотрим основные временные параметры сетевого графика. Пусть Помощь по математическому программированию онлайн -продолжительность работы, для которой соответствующая дуга Помощь по математическому программированию онлайн в сетевом графике имеет в качестве начальной — вершину с номером Помощь по математическому программированию онлайн, а в качестве конечной — вершину с номером Помощь по математическому программированию онлайн.

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

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

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

Помощь по математическому программированию онлайн

Ранний срок наступления конечного события называется критическим временем и обозначается Помощь по математическому программированию онлайн Таким образом, критическое время — это минимальный срок, за который может быть выполнен весь комплекс работ.

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

Поздними сроками начала и окончания работы Помощь по математическому программированию онлайн называется наибольшее допустимое время начала Помощь по математическому программированию онлайн и окончания Помощь по математическому программированию онлайн этой работы без нарушения сроков выполнения всего комплекса работ. Очевидно:

Помощь по математическому программированию онлайн

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

Рассмотрим работу Помощь по математическому программированию онлайн. Плановая продолжительность этой работы равна Помощь по математическому программированию онлайн Максимально допустимое время, на которое можно увеличить продолжительность работы Помощь по математическому программированию онлайн или задержать начало ее выполнения, при котором не изменится время выполнения всего проекта, называется полным резервом Помощь по математическому программированию онлайн времени этой работы. Он равен:

Помощь по математическому программированию онлайн

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

Помощь по математическому программированию онлайн

Очевидно, полный и свободный резерв времени любой работы, лежащей на критическом пути, равен нулю.

Алгоритм нахождения ранних сроков наступления событий

  1. Полагаем Помощь по математическому программированию онлайн
  2. Для Помощь по математическому программированию онлайн вычисляем
Помощь по математическому программированию онлайн

Здесь Помощь по математическому программированию онлайн — множество всех дуг, входящих в вершину Помощь по математическому программированию онлайн.

Критическое время Помощь по математическому программированию онлайн.

Алгоритм нахождения поздних сроков наступления событий

  1. Полагаем Помощь по математическому программированию онлайн (как правило Помощь по математическому программированию онлайн).
  2. Для Помощь по математическому программированию онлайн, вычисляем
Помощь по математическому программированию онлайн

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

Рассмотрим сетевой график, описанный в табл. 1. События (вершины) сетевого графика изображены следующим образом:

В верхней четверти записан номер события (вершины) в соответствии с правильной нумерацией. Номер вершины Помощь по математическому программированию онлайн, при движении из которой получено значение Помощь по математическому программированию онлайн, заносится в нижнюю четверть. В левой четверти записывается ранний срок наступления события Помощь по математическому программированию онлайн а в правой четверти — его поздний срок наступления Помощь по математическому программированию онлайн.

Найдем ранние сроки наступления каждого события для сетевого графика, изображенного на рис. 3.

Полагаем Помощь по математическому программированию онлайн. Рассматриваем вершины в порядке возрастания их номеров.

Помощь по математическому программированию онлайн

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

В результате получим 1 — 3 — 4 — 5 — 7. Найдем поздние сроки наступления событий. Полагаем время окончания всего проекта

Помощь по математическому программированию онлайн

Поставим это значение в правую четверть конечной вершины 7.

Помощь по математическому программированию онлайн

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

Помощь по математическому программированию онлайн

Задача о кратчайшем пути

К оглавлению…

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

Длиной пути Помощь по математическому программированию онлайн называется сумма

Помощь по математическому программированию онлайн

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

Теперь может быть сформулирована следующая задача : для выделенных вершин Помощь по математическому программированию онлайн и Помощь по математическому программированию онлайн сети Помощь по математическому программированию онлайн, среди всех путей их соединяющих, требуется найти путь

Помощь по математическому программированию онлайн

длина которого минимальна Если вершины сети трактовать как, например, города, а пути — как дороги между ними, протяженность которых известна, то задача состоит в нахождении кратчайшего маршрута между выделенными городами.

Прежде чем описать алгоритм нахождения кратчайших путей из выделенной вершины Помощь по математическому программированию онлайн сети Помощь по математическому программированию онлайн во все остальные ее вершины, введем следующие обозначения. Для каждой вершины j сети Помощь по математическому программированию онлайн будет обозначать длину кратчайшего Помощь по математическому программированию онлайн пути, a Помощь по математическому программированию онлайн -длину некоторого (не обязательно кратчайшего) пути Помощь по математическому программированию онлайн пути, а Помощь по математическому программированию онлайн — номер предпоследней вершины кратчайшего пути, a Помощь по математическому программированию онлайн — номер предпоследней вершины рассматриваемого пути. В процессе работы алгоритма, на каждой его итерации очередной вершине у присваивается постоянная метка вида Помощь по математическому программированию онлайн, где Помощь по математическому программированию онлайн — номер предпоследней вершины в кратчайшем Помощь по математическому программированию онлайн пути. Эта вершина присоединяется к множеству вершин Помощь по математическому программированию онлайн, имеющих постоянную метку.

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

Помощь по математическому программированию онлайн

Алгоритм построения кратчайших путей в сети

Начальный шаг. Полагаем

Помощь по математическому программированию онлайн

если дуга

Помощь по математическому программированию онлайн

в противном случае. Для всех вершин v(j) — s.

Общая итерация. Шаг 1. Пусть Помощь по математическому программированию онлайн и вершина Помощь по математическому программированию онлайн имеет метку Помощь по математическому программированию онлайн Если Помощь по математическому программированию онлайн — алгоритм заканчивает работу.

Если Помощь по математическому программированию онлайн полагаем

Помощь по математическому программированию онлайн

Если Помощь по математическому программированию онлайн — алгоритм заканчивает работу.

Если Помощь по математическому программированию онлайн — переходим к шагу 2.

Шаг 2. Для всех Помощь по математическому программированию онлайн, таких, что Помощь по математическому программированию онлайн полагаем

Помощь по математическому программированию онлайн

Если

Помощь по математическому программированию онлайн

в противном случае Помощь по математическому программированию онлайн не меняется. Переходим к шагу 1 следующей итерации.

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

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

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

Заметим, что алгоритм явно не указывает кратчайший путь к вершине, а только его длину. Но воспользовавшись второй частью метки: Помощь по математическому программированию онлайн — его легко восстановить. Действительно, Помощь по математическому программированию онлайн — номер предпоследней вершины в кратчайшем пути из Помощь по математическому программированию онлайн в Помощь по математическому программированию онлайн; пусть Помощь по математическому программированию онлайн.

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

Рассмотрим работу алгоритма на следующем примере.

Найти кратчайшие пути из вершины S во все остальные вершины сети, изображенной на рис.1 (числа над дугами равны их длинам).

Помощь по математическому программированию онлайн

На начальном плане вершина Помощь по математическому программированию онлайн получает постоянную метку Помощь по математическому программированию онлайн,Помощь по математическому программированию онлайн, соседние с ней вершины 1, 2, 3 получают временные метки Помощь по математическому программированию онлайн соответственно, а остальные вершины получают временные метки Помощь по математическому программированию онлайн. (рис. 1).

Помощь по математическому программированию онлайн

Итерация 1.

1) Минимальное значение первой части меток всех вершин равно 1 для первой вершины, т.е.

Помощь по математическому программированию онлайн

Метка первой вершины становится постоянной. Полагаем

Помощь по математическому программированию онлайн

переходим к шагу 2.

2) Просматриваем все вершины, соседние с вершиной, получившей постоянную метку (вершиной 1).

Для вершины 5 имеем

Помощь по математическому программированию онлайн

поэтому полагаем

Помощь по математическому программированию онлайн

Для вершины 2 имеем

Помощь по математическому программированию онлайн

Так как

Помощь по математическому программированию онлайн

то метка вершины 2 не меняется. Переходим ко второй итерации и т.д.

Заметим, что на каждой итерации алгоритма одна очередная вершина Помощь по математическому программированию онлайн присоединяется к множеству Помощь по математическому программированию онлайн и получает постоянную метку Помощь по математическому программированию онлайн, которая в дальнейшем не меняется, а для остальных вершин Помощь по математическому программированию онлайн пересматриваются текущие значения величин Помощь по математическому программированию онлайн, некоторые из которых могут меняться и в дальнейшем. Результаты вычислений на начальном шаге (итерация 0) и на всех последующих итерациях удобно заносить в табл. 1. Если пара чисел Помощь по математическому программированию онлайн помечается символом ( * ), это означает, что вершина Помощь по математическому программированию онлайн получила постоянную метку Помощь по математическому программированию онлайн, которая в дальнейшем не меняется.

Помощь по математическому программированию онлайн

Алгоритм закончил работу на 7-й итерации случаем, когда

Помощь по математическому программированию онлайн

Это означает, что не существует пути, ведущего из вершины s в вершину 6. Для всех остальных вершин сети длины кратчайших путей найдены, а сами пути могут быть построены, как описано выше. Например, для вершины 2 имеем:

Помощь по математическому программированию онлайн

предыдущая вершина кратчайшего пути — 3. Для вершины 3

Помощь по математическому программированию онлайн

для вершины 4

Помощь по математическому программированию онлайн

для вершины 5 —

Помощь по математическому программированию онлайн

а для вершины 1 —

Помощь по математическому программированию онлайн

Таким образом, кратчайший (Помощь по математическому программированию онлайн — 2) путь проходит через вершины —Помощь по математическому программированию онлайн,1, 5, 4, 3,2 и его длина равна 7.

Все дуги сети, входящие в кратчайшие пути, изображены на рис. 3. Пары чисел около вершин (рис. 2, 3) — это найденные в результате работы алгоритма постоянные метки вершин, первая часть которых Помощь по математическому программированию онлайн — длина кратчайшего Помощь по математическому программированию онлайн пути Помощь по математическому программированию онлайн, а вторая — предпоследняя вершина этого пути (последней является вершина Помощь по математическому программированию онлайн).

Кратчайшие пути образуют дерево, но не остовное, так как вершина 6 не соединена ни с одной другой вершиной.

Помощь по математическому программированию онлайн

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

Возможно эти страницы вам будут полезны: