Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СФУ - Компьютерное моделирование.doc
Скачиваний:
69
Добавлен:
21.09.2019
Размер:
901.63 Кб
Скачать

Решение транспортной задачи

Цель работы: научиться работать со встроенными функциями пакета MATLAB; рассмотреть пример использования встроенных функций для решения задачи линейного программирования.

Краткие теоретические сведения

Задача линейного программирования заключается в оптимизации линейной функции при линейных ограничениях. Стандартной форме записи задачи линейного программирования в матричном виде соответствует критерий

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

, ,

где ; ; ; . Здесь С – вектор коэффициентов линейной критериальной функции, А – матрица системы, Х – вектор переменных, В – вектор свободных членов. Векторное неравенство означает, что все компоненты вектора Х неотрицательны, т. е. , .

Транспортная задача – это частный случай задачи линейного программирования. Вектор переменных запишем в виде

,

а вектор коэффициентов – в виде

.

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

Система ограничений представляет собой систему уравнений

,

,

где – мощность i-го поставщика; – спрос j-го потребителя. В случае закрытой транспортной задачи выполняется условие, которое носит название уравнения баланса:

.

Исходные данные транспортной задачи обычно представляют в виде транспортной таблицы (табл. 1).

Таблица 1

Транспортная таблица

Mi

Ni

N1

N2

Nn

M1

C11

C12

C1n

M2

C21

C22

C2n

Mm

Cm1

Cm2

cmn

Таким образом, решение транспортной задачи состоит в распределении объемов перевозок для каждой пары «поставщик–потребитель» так, чтобы:

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

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

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

Указания к выполнению

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

Таблица 2

Исходные данные для транспортной задачи

Mi

Ni

150

200

100

400

150

1

4

4

2

300

3

6

3

9

250

4

8

6

2

150

1

5

5

13

Вначале необходимо убедиться в выполнении уравнения баланса. В частности, для приведенного примера выполняется равенство

.

Приведенный ниже скрипт реализует алгоритм решения транспортной задачи путем ее приведения к задаче линейного программирования и последующего решения средствами MATLAB:

% Решение транспортной задачи

% путем ее приведения к задаче линейного программирования

% Вектор коэффициентов

C = [1; 4; 4; 2;

3; 6; 3; 9;

4; 8; 6; 2;

1; 5; 5; 13];

% Бинарные коэффициенты в ограничениях

A = [1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1

1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0

0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0

0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0

0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1];

% Правые части ограничений

B = [150; 300; 250; 150;

150; 200; 100; 400];

% Нулевой вектор для задания условия неотрицательности

% объемов перевозок

lb = zeros(16, 1);

% Функция вычисления искомых объемов перевозок

x = linprog(C, [], [], A, B, lb)

В результате выполнения скрипта искомый вектор перевозок (поставок) отображается в рабочей области MATLAB.

Порядок выполнения работы

1. Создать новый скрипт MATLAB.

2. Задать исходные данные для решения транспортной задачи.

3. Описать транспортную задачу в терминах задачи линейного программирования и решить ее, пользуясь соответствующей встроенной функцией MATLAB.