Практическая работа № 6.1. « Транспортная задача. Метод Северо-западного угла»

Цель работы:

Важным частным случаем задачи линейного программирования является так называемая транспортная задача.

Предположим, что существуют N потребителей и M поставщиков некоторого однородного груза, у каждого из поставщиков определенный запас этого груза (Ai единиц, i=1,2,…,M), а каждому из потребителей требуется Bj единиц груза (j=1,2,…, N). Известны также затраты cij на перевозку единицы груза от поставщика Ai к потребителю Bj. Требуется составить такой план перевозок от поставщиков к потребителям, чтобы суммарные затраты на перевозки оказались минимальными (при этом должны быть по возможности вывезены все запасы поставщиков и удовлетворены все запросы потребителей).

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

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

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

Итак, задача ставится следующим образом. Найти объемы перевозокдля каждой пары “поставщик — потребитель ” так, чтобы:

1) мощности всех поставщиков были реализованы;

2) спросы всех потребителей были удовлетворены;

3) суммарные затраты на перевозку были бы минимальны.

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

Пример 6.1.1. Транспортная задача задана с помощью таблицы 6.1.1, из которой видно, что на складах трех поставщиков A1, A2, A3 сосредоточены соответственно 30, 190 и 250 единиц груза, потребители B1, B2, B3, B4 нуждаются соответственно в 70, 120, 150, 130 единицах груза, а стоимости перевозок указаны непосредственно в таблице.      
В А        
         
         
         

Таблица 6.1.1.

Заметим, что суммарные запасы (30+190+250=470) равны суммарным запросам (70+120+150+130=470). Разместим в основной (незаштрихованной) части таблицы искомые объемы перевозок xij и перейдем к составлению математической модели. Заметим, что нумерация соответствует привычной нумерации элементов в матрицах (i – номер строки, j – номер столбца). Итак, целевая функция принимает вид

(6.1.1)

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

(6.1.2)

Итак, мы построили математическую модель предложенной задачи с целевой функцией (6.1.1.) и системой ограничений (6.1.2).

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

Построение начального опорного решения. Рассмотрим два основных приема для задач с правильным балансом. Первый из них имеет более простой алгоритм, а второй дает решение, более близкое к оптимальному (Этот прием рассмотрим в практической работе № 6. Часть 2).

Метод северо-западного угла. Основная идея заключается в том, вычисление значений xij начинается с верхней левой клетки (северо-западный угол таблицы). Из значений запасов и запросов, ей соответствующих (A1 и B1) выбираем минимальное – это и будет объем перевозок x11. При этом либо удовлетворены все запросы (и тогда из рассмотрения исключается потребитель, при этом в таблице в оставшихся ячейках соответствующего столбца ставятся прочерки, а объем запасов в соответствующей строке уменьшается на это значение), либо вывезены все запасы (из рассмотрения исключается поставщик, прочерки ставятся в строке и уменьшается объем запросов). В случае, когда A1 = B1, вычеркивается либо строка, либо столбец (но не строка и столбец одновременно! ) Далее действия повторяются со следующей ячейкой, которая оказалась верхней левой – и так до момента, пока не окажется, что все запасы вывезены, а все запросы удовлетворены. При этом клетки, в которые попали значения xij,, называются занятыми.

Внимание! Во избежание ошибок необходимо убедиться в том, что число занятых клеток равно M+N-1; в противном случае построенное начальное решение не будет опорным. При этом необходимо помнить, что, в силу сформулированного правила выбора объема перевозок, в занятых клетках могут оказаться значения, равные нулю!

Пример 5.2. Ниже в таблицах 6.1.2-6.1.7 приводится пошаговое построение методом северо-западного угла начального опорного решения для закрытой задачи из примера 6.1.1.; объемы перевозок внесены в таблицы жирным курсивным шрифтом.

В А        
    - - -
         
         

Таблица 6.1.2.

В А        
    - - -
         
  -      

Таблица 6.1.3.

   
В А        
    - - -
         
  - -    

Таблица 6.1.4.

В А        
    - - -
        -
  - -    

Таблица 6.1.5.

 
В А        
    - - -
        -
  - -    

Таблица 6.1.6.

 
В А        
    - - -
        -
  - -    

Таблица 6.1.7.

 
       

Итак, заняты 6 ячеек: (1;1), (2;1), (2;2), (2;3), (3;3) и (3;4) (здесь, как и всюду далее, в «адресе» ячейки первым указан номер строки, вторым – номер столбца, заголовки в нумерации не учитываются). Количество занятых ячеек совпадает с числом M+N-1=3+4-1=6. Мы построили начальное опорное решение X1, остается найти значение целевой функции для этого опорного решения (в свободных клетках, т.е. клетках с прочерками, значение объема перевозок считается равным нулю и потому на результат вычисления не влияет):

.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  




Подборка статей по вашей теме: