- •Содержание
- •Предисловие
- •Глава I. Начала линейного программирования
- •§1. Задача линейного программирования. Типичные задачи линейного программирования, их математические модели.
- •1.1 . Задача линейного программирования
- •1.2. Типичные злп и их математические модели
- •1.3. Упражнения.
- •§2. Общая злп. Канонический вид злп.
- •2.2. Канонический вид злп
- •§3. Теоретические основы решения злп. Геометрическая интерпретация злп. Идея аналитического решения
- •3.1. Теоретические основы решения злп
- •3.2. Геометрическая интерпретация злп
- •3.4. Идея аналитического решения злп
- •3.5. Теоретические основы решения злп (продолжение)
- •§4. Симплекс-метод решения злп
- •4.1. Алгоритм симплекс-метода
- •4.2. Симплекс-таблицы.
- •§5. Метод искусственного базиса
- •5.1. Суть метода искусственного базиса
- •Глава II. Двойственность и целочисленность в линейном программировании. Транспортная задача.
- •§1. Теория двойственности
- •1.1. Задача, приводящая к паре двойственных задач
- •1.2. Пара симметричных двойственных задач
- •1.3. Пара несимметричных двойственных задач
- •1.4. Теоремы двойственности
- •1.5. Упражнения.
- •§2. Элементы целочисленного программирования
- •2.1. Постановка и геометрическая интерпретация
- •2.2. Метод Гомори
- •2.3. Упражнения.
- •§3. Транспортная задача
- •3.1. Постановка и математическая модель транспортной задачи
- •3.2. Теоретические основы решения транспортной задачи
- •3.3. Алгоритм метода потенциалов.
- •3.3.1. Основные пункты алгоритма:
- •3.3.2. Построение первоначального опорного плана.
- •3.3.4. Переход к новому опорному плану (построение очередного опорного плана).
- •3.3.5. Метод наименьших затрат построения первоначального опорного плана.
- •3.4. Сведение задачи открытого типа к задаче закрытого типа
- •3.5. Упражнения.
- •Задание лп-4
- •Задание лп-5
- •Задание лп-6
- •1. Приводим задачу к каноническому виду.
- •Задание лп-4
- •Задание лп-5
- •Задание лп-6
Задание лп-6
Решить транспортную задачу методом потенциалов. Первоначальный план составить методами северо-западного угла и наименьших затрат:
-
bj
ai
40
60
50
50
50
6
3
4
4
60
3
4
5
3
90
4
4
6
5
30
3
5
3
6
Решение. Алгоритм метода потенциалов следующий:
1) Построить первоначальный опорный план.
2) Проверить план на оптимальность. Для этого:
2.1) Вычислить потенциалы ui (i=1, 2, …, m) и vj (j=1, 2, …, n).
2.2) Проверить условие оптимальности ui+vj=cij (i=1, 2, …, m, j=1, 2, …, n). Если критерий оптимальности не выполнен, то перейти к пункту 3). В противном случае задача решена. Перейти к пункту 5).
3) Перейти к очередному опорному плану. Для этого:
3.1) Найти оценки ij=ui+vjcij для клеток (i, j) ui+vj>cij.
3.2) Выбрать клетку с максимальным ij>0.
3.3) Из выбранной клетки построить помеченный цикл.
3.4) Осуществить сдвиг по циклу.
4) Перейти к пункту 2).
5) Вычислить стоимость перевозок.
Алгоритм применяется, вообще говоря, к задаче закрытого типа. Если задача является задачей закрытого типа, то её необходимо привести к задаче закрытого типа.
Имеем =50+60+90+30=230 и =40+60+50+50=200, то есть . При этом > , то есть у поставщиков имеется излишки груза, и задача является задачей открытого типа. Сведём её к задаче закрытого типа, вводя фиктивного потребителя с b5= =30 единицами груза и нулевыми стоимостями перевозок:
-
bj
ai
40
60
50
50
30
50
6
3
4
4
0
60
3
4
5
3
0
90
4
4
6
5
0
30
3
5
3
6
0
А) Решим задачу, составив первоначальный опорный план методом северо-западного угла. Итак, реализуем алгоритм:
1) Построим первоначальный опорный план.
У первого поставщика имеется 50 единиц груза, а первому потребителю нужно 40 единиц. Поэтому можем спланировать перевозку 40 единиц груза от первого поставщика к первому потребителю: вписываем в клетку (1, 1) 40 и как бы вычёркиваем первого потребителя он «получил своё» и в дальнейшем распределении груза не участвует: ставим знак «» над первым столбцом:
-
bj
ai
40
60
50
50
30
50
6
40
3
4
4
0
60
3
4
5
3
0
90
4
4
6
5
0
30
3
5
3
6
0
У первого поставщика осталось 10 единиц груза, а второму потребителю всего нужно 60. Поэтому вписываем эти 10 единиц в клетку (1, 2), вычеркнув первую строку (у первого поставщика все 50 единиц груза использованы, и он выбывает из дальнейшего распределения поставок):
-
bj
ai
40
60
50
50
30
50
6
40
3
10
4
4
0
60
3
4
5
3
0
90
4
4
6
5
0
30
3
5
3
6
0
Второму потребителю требуется ещё 50 единиц, которые мы «заберём» у второго поставщика (у него их имеется 60 единиц): вписываем 50 в клетку (2, 2) и вычеркнем второй столбец:
-
bj
ai
40
60
50
50
30
50
6
40
3
10
4
4
0
60
3
4
50
5
3
0
90
4
4
6
5
0
30
3
5
3
6
0
У второго поставщика осталось ещё 10 единиц груза, а третьему потребителю требуется 50 единиц. Вписав эти 10 единиц в клетку (2, 3) вычёркиваем второго поставщика:
-
bj
ai
40
60
50
50
30
50
6
40
3
10
4
4
0
60
3
4
50
5
10
3
0
90
4
4
6
5
0
30
3
5
3
6
0
Аналогично рассуждая, заполняем клетки (3, 3) и (3, 4) соответственно 40 и 50 единицами грузов. При этом при заполнении клетки (3, 3) выбывает только один участник третий потребитель (соответственно, его вычёркиваем), а при заполнении клетки (3, 4) фактически выбывают сразу два участника третий поставщик и четвёртый потребитель, но вычеркивать должны только одного участника, скажем, третьего поставщика. Вычёркивание на одном шаге только одного участника обеспечивает участие второго в следующем шаге заполнения таблицы, и в результате будет заполнено в точности m+n1 клеток:
-
bj
ai
40
60
50
50
30
50
6
40
3
10
4
4
0
60
3
4
50
5
10
3
0
90
4
4
6
40
5
50
0
30
3
5
3
6
0
Так как четвёртый потребитель ещё не вычеркнут, то вписываем 0 в клетку (4, 4) и вычёркиваем четвёртого потребителя:
-
bj
ai
40
60
50
50
30
50
6
40
3
10
4
4
0
60
3
4
50
5
10
3
0
90
4
4
6
40
5
50
0
30
3
5
3
6
0
0
Наконец, на последнем, 4+51=8-м шаге, вписываем 30 в клетку (4, 5) и вычёркиваем обоих участников четвёртого поставщика и пятого потребителя, и получили первоначальный опорный план задачи:
-
bj
ai
40
60
50
50
30
50
6
40
3
10
4
4
0
60
3
4
50
5
10
3
0
90
4
4
6
40
5
50
0
30
3
5
3
6
0
0
30
21) Проверим план на оптимальность. Для этого
2.11) Найдём потенциалы:
-
bj
ai
40
60
50
50
30
50
6
40
3
10
4
4
0
0
60
3
4
50
5
10
3
0
1
90
4
4
6
40
5
50
0
2
30
3
5
3
6
0
0
30
3
6
3
4
3
3
Присваиваем u1=0 и по заполненным клеткам (1, 1) и (1, 2) первой строки определяем v1=c11u1=60=6 и v2=c12u1=30=3. По заполненной клетке (2, 2) второго столбца определяем u2=c22v2=43=1. Далее, по заполненной клетке (2, 3) второй строки определяем v3=c23u2=51=4. Теперь по заполненной клетке (3, 3) третьей строки определяем u3=c33v3=64=2, а по заполненной клетке (3, 4) третьей строки определяем v4=c34u3=52=3. Наконец, по заполненным клеткам (4, 4) и (4, 5) четвёртой строки определяем сначала u4=c44v4=63=3, а затем v5=c45u4=03=3.
2.21) Проверяем условие оптимальности для пустых клеток:
u1+v3=0+44=c13, u1+v4=0+34=c13, u1+v5=03<0=c15,
u2+v1=1+6>3=c21, u2+v4=1+3>3=c24, u2+v5=13<0=c25,
u3+v1=2+6>4=c31, u3+v2=2+3>4=c22, u3+v5=23<0=c35,
u4+v1=3+6>3=c41, u4+v2=3+3>5=c42, u4+v3=3+4>3=c43,
и условие оптимальности нарушается в клетках (2, 1), (2, 4), (3, 1), (3, 2), (4, 1), (4, 2) и (4, 3): u2+v1>c21, u2+v4>c24, u3+v1>c31, u3+v2>c22, u4+v1>c41, u4+v2>c42, u4+v3>c43.
3.11) Вычисляем оценки клеток, в которых нарушается условие оптимальности:
21=u2+v1c21=1+63=4, 24=u2+v4c24=3+13=1,
31=u3+v1c31=2+64=4, 32=u3+v2c32=2+34=1,
41=u4+v1c41=3+63=6, 42=u4+v2c42=3+35=1,
43=u4+v3c43=3+43=4.
Для удобства работы вписываем эти оценки в квадратных скобках в нижних правых углах клеток:
-
bj
ai
40
60
50
50
30
50
6
40
3
10
4
4
0
0
60
3
[4]
4
50
5
10
3
[1]
0
1
90
4
[4]
4
[1]
6
40
5
50
0
2
30
3
[6]
5
[1]
3
[4]
6
0
0
30
3
6
3
4
3
3
3.21) Выбираем клетку с максимальным ij>0 клетка (4, 1): 41=6.
3.31) Строим помеченный цикл из выбранной клетки (4, 1):
-
bj
ai
40
60
50
50
30
50
6
40
3
10
+
4
4
0
0
60
3
[4]
4
50
5
10
+
3
[1]
0
1
90
4
[4]
4
[1]
6
40
5
50
+
0
2
30
3
+ [6]
5
[1]
3
[4]
6
0
0
30
3
6
3
4
3
3
3.41) «Перемещаем» по циклу 0 единиц груза (минимальное содержание клеток со знаком «»). Получили очередной опорный план (фактически тот же, что и предыдущий, но с другой системой заполненных клеток):
-
bj
ai
40
60
50
50
30
50
6
40
3
10
4
4
0
60
3
4
50
5
10
3
0
90
4
4
6
40
5
50
0
30
3
0
5
3
6
0
30
22) Проверим план на оптимальность. Для этого
2.12) Найдём потенциалы. Присваиваем u1=0 и по заполненным клеткам (1, 1) и (1, 2) первой строки определяем v1=c11u1=60=6 и v2=c12u1=30=3. По заполненной клетке (2, 2) второго столбца определяем u2=c22v2=43=1. Далее, по заполненной клетке (2, 3) второй строки определяем v3=c23u2=51=4. Теперь по заполненной клетке (3, 3) третьей строки определяем u3=c33v3=64=2, а по заполненной клетке (3, 4) третьей строки определяем v4=c34u3=52=3. Наконец, по заполненным клеткам (4, 1) и (4, 5) четвёртой строки определяем сначала u4=c41v4=36=3, а затем v5=c45u4=0(3)=3:
-
bj
ai
40
60
50
50
30
50
6
40
3
10
4
4
0
0
60
3
4
50
5
10
3
0
1
90
4
4
6
40
5
50
0
2
30
3
0
5
3
6
0
30
3
6
3
4
3
3
2.22) Проверяем условие оптимальности для пустых клеток:
u1+v3=0+44=c13, u1+v4=0+34=c13, u1+v5=0+3>0=c15,
u2+v1=1+6>3=c21, u2+v4=1+3>3=c24, u2+v5=1+3>0=c25,
u3+v1=2+6>4=c31, u3+v2=2+3>4=c22, u3+v5=2+3>0=c35,
u4+v2=3+35=c42, u4+v3=3+43=c43, u4+v4=3+36=c43,
и условие оптимальности нарушается в клетках (1, 5), (2, 1), (2, 4), (2, 5), (3, 1), (3, 2), (3, 5): u1+v5>c15, u2+v1>c21, u2+v4>c24, u2+v5>c25, u3+v1>c31, u3+v2>c32, u3+v5>c35.
3.12) Вычисляем оценки клеток, в которых нарушается условие оптимальности:
15=u1+v5c15=0+30=3, 21=u2+v1c21=1+63=4,
24=u2+v4c24=3+13=1, 25=u2+v5c25=1+30=4,
31=u3+v1c31=2+64=4, 32=u3+v2c32=2+34=1,
35=u3+v5c35=2+30=5.
3.22) Выбираем клетку с максимальным ij>0 клетка (3, 5): 35=5.
3.32) Строим помеченный цикл из выбранной клетки (3, 5):
-
bj
ai
40
60
50
50
30
50
6
40
3
10
+
4
4
0
[3]
0
60
3
[4]
4
50
5
10
+
3
[1]
0
[4]
1
90
4
[4]
4
[1]
6
40
5
50
0
+ [5]
2
30
3
0
+
5
3
6
0
30
3
6
3
4
3
3
3.42) «Перемещаем» по циклу 30 единиц груза (минимальное содержание клеток со знаком «»). Получили очередной опорный план:
-
bj
ai
40
60
50
50
30
50
6
10
3
40
4
4
0
60
3
4
20
5
40
3
0
90
4
4
6
10
5
50
0
30
30
3
30
5
3
6
0
2.13) Найдём потенциалы, приведя только вычисления без комментариев: u1=0, v1=c11u1=60=6, v2=c12u1=30=3, u2=c22v2=43=1, v3=c23u2=51=4, u3=c33v3=64=2, v4=c34u3=52=3, u4=c41v4=36=3, v5=c35u3=02=2:
-
bj
ai
40
60
50
50
30
50
6
10
3
40
4
4
0
0
60
3
4
20
5
40
3
0
1
90
4
4
6
10
5
50
0
30
2
30
3
30
5
3
6
0
3
6
3
4
3
2
2.23) Проверяем условие оптимальности для пустых клеток:
u1+v3=0+44=c13, u1+v4=0+34=c13, u1+v5=02<0=c15,
u2+v1=1+6>3=c21, u2+v4=1+3>3=c24, u2+v5=12<0=c25,
u3+v1=2+6>4=c31, u3+v2=2+3>4=c22, u4+v2=3+35=c42,
u4+v3=3+43=c43, u4+v4=3+36=c44, u4+v5=320=c45,
и условие оптимальности нарушается в клетках (2, 1), (2, 4), (3, 1), (3, 2): u2+v1>c21, u2+v4>c24, u3+v1>c31, u3+v2>c32.
3.13) Вычисляем оценки клеток, в которых нарушается условие оптимальности: 21=u2+v1c21=1+63=4, 24=u2+v4c24=3+13=1, 31=u3+v1c31=2+64=4, 32=u3+v2c32=2+34=1.
3.23) Выбираем клетку с максимальным ij>0. На этот раз таких клеток два: клетки (2, 1) и (3, 1): 21=31=4. Выберем клетку с наименьшей стоимостью перевозок: (2, 1).
3.33) Строим помеченный цикл из выбранной клетки (3, 5):
-
bj
ai
40
60
50
50
30
50
610
3
40
+
4
4
0
0
60
3+ [4]
4
20
5
40
3
[1]
0
1
90
4
[4]
4
[1]
6
10
5
50
0
30
2
30
3
30
5
3
6
0
3
6
3
4
3
2
3.43) «Перемещаем» по циклу 10 единиц груза (минимальное содержание клеток со знаком «»). Получили очередной опорный план:
-
bj
ai
40
60
50
50
30
50
6
3
50
4
4
0
60
3
10
4
10
5
40
3
0
90
4
4
6
10
5
50
0
30
30
3
30
5
3
6
0
2.14) Находим потенциалы, опуская вычисления и комментарии:
-
bj
ai
40
60
50
50
30
50
6
3
50
4
4
0
0
60
3
10
4
10
5
40
3
0
1
90
4
4
6
10
5
50
0
30
2
30
3
30
5
3
6
0
1
2
3
4
3
2
2.24) 3.13) Проверяем условие оптимальности для пустых клеток и вычисляем оценки клеток, в которых нарушается условие оптимальности, опуская подробности:
-
bj
ai
40
60
50
50
30
50
6
3
50
4
4
0
0
60
3
10
4
10
5
40
3
[1]
0
1
90
4
4
[1]
6
10
5
50
0
30
2
30
3
30
5
3
[2]
6
0
1
2
3
4
3
2
3.24) 3.33) Выбираем клетку с максимальным ij>0 и строим помеченный цикл из выбранной клетки (4, 3):
-
bj
ai
40
60
50
50
30
50
6
3
50
4
4
0
0
60
3
10+
4
10
5
40
3
[1]
0
1
90
4
4
[1]
6
10
5
50
0
30
2
30
3
30
5
3
+ [2]
6
0
1
2
3
4
3
2
3.44) «Перемещаем» по циклу 30 единиц груза (минимальное содержание клеток со знаком «»). Получили очередной опорный план:
-
bj
ai
40
60
50
50
30
50
6
3
50
4
4
0
60
3
40
4
10
5
10
3
0
90
4
4
6
10
5
50
0
30
30
3
5
3
30
6
0
Далее, действуя аналогично вышеизложенному, получаем следующую последовательность итераций, результаты которых отражаем в отдельных таблицах:
2.15) 3.45):
-
bj
ai
40
60
50
50
30
50
6
3
50
4
4
0
0
60
3
40
4
10
5
10
3
+ [1]
0
1
90
4
4
[1]
6
10+
5
50
0
30
2
30
3
5
3
30
6
0
1
2
3
4
3
2
2.16) 3.46):
-
bj
ai
40
60
50
50
30
50
6
3
50
4
4
0
0
60
3
40
4
10
5
3
10+
0
1
90
4
[1]
4
+ [2]
6
20
5
40
0
30
3
30
3
5
3
30
6
0
0
2
3
3
2
3
2.17) 3.47):
-
bj
ai
40
60
50
50
30
50
6
3
50
4
[1]
4
0
0
60
3
40
4
5
3
20
+
0
1
90
4
+ [1]
4
10
6
20
5
30
0
30
1
30
3
5
3
30
6
0
2
4
3
5
4
1
2.18) 3.48):
-
bj
ai
40
60
50
50
30
50
6
3
50
4
+ [1]
4
0
0
60
3
10
4
5
3
50
0
0
90
4
30
4
10+
6
20
5
0
30
1
30
3
5
3
30
6
0
2
3
3
5
3
1
После сдвига по циклу получаем следующий опорный план:
-
bj
ai
40
60
50
50
30
50
6
3
30
4
20
4
0
60
3
10
4
5
3
50
0
90
4
30
4
30
6
5
0
30
30
3
5
3
30
6
0
Проверяем его на оптимальность:
-
bj
ai
40
60
50
50
30
50
6
3
30
4
20
4
0
0
60
3
10
4
5
3
50
0
0
90
4
30
4
30
6
5
0
30
1
30
3
5
3
30
6
0
1
3
3
4
3
1
u1+v1=0+36=c11, u1+v4=0+34=c13, u1+v5=010=c15,
u2+v2=0+33=c22, u2+v3=0+43=c23, u2+v5=010=c25,
u3+v3=1+46=c33, u3+v4=1+35=c34, u4+v1=1+33=c41,
u4+v2=1+35=c42, u4+v4=1+36=c44, u4+v5=110=c45,
и критерий оптимальности ui+vjcij выполняется для всех клеток таблицы. Поэтому закрытая задача решена.
Вычисляем стоимость перевозок:
303+204+103+503+304+304+303=680.
В ответе не учитываются перевозки к фиктивному потребителю: матрица перевозок следующая
Таким образом, 30 единиц груза третьего поставщика остаются невостребованными.
Б) Решаем задачу, составив первоначальный опорный план методом методом наименьших затрат. Реализуем алгоритм:
1) Построим первоначальный опорный план.
Из всех стоимостей реальных перевозок самыми дешёвыми являются перевозки в клетках ((1, 2), (2, 1), (2, 4), (4, 1), (4, 3) со стоимостью 3 ед. Заполняем из них клетку (1, 2). При этом вычёркиваем первого поставщика:
-
bj
ai
40
60
50
50
30
50
6
3
50
4
4
0
60
3
4
5
3
0
90
4
4
6
5
0
30
3
5
3
6
0
Из оставшихся клеток с данной стоимостью (3 ед.) заполняем клетку (2, 1), вычеркнув первого потребителя:
-
bj
ai
40
60
50
50
30
50
6
3
50
4
4
0
60
3
40
4
5
3
0
90
4
4
6
5
0
30
3
5
3
6
0
Во второй строке имеется ещё одна клетка со стоимостью 3 ед. Это (2, 4). При этом у второго поставщика имеется ещё 20 единиц груза. Поэтому в эту клетку вписываем 20 и вычёркиваем второго поставщика:
-
bj
ai
40
60
50
50
30
50
6
3
50
4
4
0
60
3
40
4
5
3
20
0
90
4
4
6
5
0
30
3
5
3
6
0
Невычеркнутой клеткой с наименьшей стоимостью 3 ед. является единственная (4, 3). Заполняем её:
-
bj
ai
40
60
50
50
30
50
6
3
50
4
4
0
60
3
40
4
5
3
20
0
90
4
4
6
5
0
30
3
5
3
30
6
0
Невычеркнутой осталась единственная строка третья. В этой строке невычеркнутыми являются клетки со второго и до конца. Заполняем их, начиная с наиболее дешёвой из невычеркнутых: 10 вписываем в клетку ((3, 2) и вычёркиваем второй столбец, 30 вписываем в клетку (3, 4) и вычёркиваем четвёртый столбец, наконец, 20 вписываем в клетку (3, 3) и вычёркиваем третий столбец. Таким образом, клетки с реальными перевозками заполнены:
-
bj
ai
40
60
50
50
30
50
6
3
50
4
4
0
60
3
40
4
5
3
20
0
90
4
4
10
6
20
5
30
0
30
3
5
3
30
6
0
На последнем шаге заполняем клетку с фиктивным участником это клетка (3, 5), вычеркнув третью строку и пятый столбец, тем самым завершая составление первоначального опорного плана:
-
bj
ai
40
60
50
50
30
50
6
3
50
4
4
0
60
3
40
4
5
3
20
0
90
4
4
10
6
20
5
30
0
30
30
3
5
3
30
6
0
Как видим, мы получили таблицу, которая была получена на седьмой итерации при решении после составления первоначального опорного плана методом северо-западного угла. Поэтому задача решена.
Ответ: Матрица перевозок: . Стоимость перевозок Fmin=680 у.е.
