Розв’язання:
Математична модель транспортної задачі:
F = ∑∑cijxij,
при умові:
∑xij = ai, i = 1,2,…, m,
∑xij = bj, j = 1,2,…, n,
Вартість перевезення одиниці вантажу з кожного пункту відправлення у відповідні пункти призначення задана матрицею тарифів
|
1 |
2 |
3 |
4 |
5 |
Запаси |
1 |
1 |
2 |
3 |
4 |
8 |
300 |
2 |
4 |
5 |
6 |
2 |
6 |
200 |
3 |
1 |
1 |
3 |
4 |
5 |
100 |
4 |
3 |
3 |
2 |
2 |
7 |
200 |
5 |
5 |
6 |
7 |
8 |
10 |
300 |
Потреби |
100 |
100 |
200 |
200 |
300 |
|
Перевіримо необхідну і достатню умови розв'язання задачі.
∑a = 300 + 200 + 100 + 200 + 300 = 1100
∑b = 100 + 100 + 200 + 200 + 300 = 900
Занесемо вихідні дані у розподільну таблицю.
|
1 |
2 |
3 |
4 |
5 |
6 |
Запаси |
1 |
1 |
2 |
3 |
4 |
8 |
0 |
300 |
2 |
4 |
5 |
6 |
2 |
6 |
0 |
200 |
3 |
1 |
1 |
3 |
4 |
5 |
0 |
100 |
4 |
3 |
3 |
2 |
2 |
7 |
0 |
200 |
5 |
5 |
6 |
7 |
8 |
10 |
0 |
300 |
Потреби |
100 |
100 |
200 |
200 |
300 |
100 |
|
Етап I. Пошук першого опорного плану.
1. Використовуючи метод Фогеля, побудуємо перший опорний план транспортної задачі. Для кожного рядка і стовпця таблиці умов знайдемо різниці між двома мінімальними тарифами, записаними в даному рядку або стовпці, і помістимо їх у відповідному додатковому стовпці або рядку.
|
1 |
2 |
3 |
4 |
5 |
6 |
Запаси |
1 |
1 |
2 |
3 |
4 |
8 |
0 |
300 |
2 |
4 |
5 |
6 |
2[200] |
6 |
0 |
200 |
3 |
1[100] |
1 |
3 |
4 |
5 |
0 |
100 |
4 |
3 |
3 |
2[200] |
2 |
7 |
0 |
200 |
5 |
5 |
6[100] |
7 |
8 |
10 |
0[200] |
300 |
Потреби |
100 |
100 |
200 |
200 |
300 |
200 |
|
2. Підрахуємо число зайнятих клітин таблиці, їх 8, а має бути m+n-1=10. Отже, опорний план є виродженим.
Для отримання не виродженого плану примусово додаємо нуль [0] в клітку (1; 1); (1, 2).
Етап II. Поліпшення опорного плану.
Перевіримо оптимальність опорного плану. Знайдемо попередні потенціали ui, vi. по зайнятих клітинах таблиці, в яких ui + vi = cij, вважаючи, що u1 = 0.
|
v 1 = 1 |
v 2 = 2 |
v 3 = 3 |
v 4 = 4 |
v 5 = 8 |
v 6 = 0 |
u1 = 0 |
1[0] |
2[0] |
3[0] |
4[0] |
8[300] |
0[0] |
u2 = -2 |
4 |
5 |
6 |
2[200] |
6 |
0 |
u3 = 0 |
1[100] |
1 |
3 |
4 |
5 |
0 |
u4 = -1 |
3 |
3 |
2[200] |
2 |
7 |
0 |
u5 = 2 |
5 |
6[100] |
7 |
8 |
10 |
0[200] |
Опорний план не є оптимальним, тому що існують оцінки вільних клітин, для яких ui + vi > cij
Вибираємо максимальну оцінку вільної клітини (3; 1): 4
Для цього в перспективну клітку (3; 1) поставимо знак «+», а в решті вершинах багатокутника чергуються знаки «-», «+», «-».
|
1 |
2 |
3 |
4 |
5 |
6 |
Запаси |
|
1 |
1[0] |
2[0][-] |
3[0] |
4[0] |
8[300] |
0[0][-] |
300 |
|
2 |
4 |
5 |
6 |
2[200] |
6 |
0 |
200 |
|
3 |
1[100] |
1 |
3 |
4 |
5 |
0 |
100 |
|
4 |
3 |
3 |
2[200] |
2 |
7 |
0 |
200 |
|
5 |
5 |
6[100][+] |
7 |
8 |
10 |
0[200][+] |
300 |
|
Потреби |
100 |
100 |
200 |
200 |
300 |
200 |
|
Цикл наведено в таблиці (3,1; 1,1; 1,2; 3,2;).
З вантажів хij які стоять в мінусових клітинах, вибираємо найменший, тобто у = min (1, 1) = 0. Додаємо 0 до обсягів вантажів, що стоять в плюсових клітинах і віднімаємо 0 з Хij, які стоять в мінусових клітинах. В результаті отримаємо новий опорний план.
|
1 |
2 |
3 |
4 |
5 |
|
Запаси |
1 |
1[0] |
2[0] |
3[0] |
4[0] |
8[300] |
0[0] |
300 |
2 |
4 |
5 |
6 |
2[200] |
6 |
0 |
200 |
3 |
1[100] |
1 |
3 |
4 |
5 |
0 |
100 |
4 |
3 |
3 |
2[200] |
2 |
7 |
0 |
200 |
5 |
5 |
6[100] |
7 |
8 |
10 |
0[200] |
300 |
Потреби |
100 |
100 |
200 |
200 |
300 |
200 |
|
Перевіримо оптимальність опорного плану. Знайдемо попередні потенціали ui, vi. по зайнятих клітинам таблиці, в яких ui + vi = cij, вважаючи, що u1 = 0.
|
v 1 = 1 |
v 2 = 2 |
v 3 = 3 |
v 4 = 4 |
v 5 = 8 |
v 6 = 0 |
u1 = 0 |
1[0] |
2[0] |
3[0] |
4[0] |
8[300] |
0[0] |
u2 = -2 |
4 |
5 |
6 |
2[200] |
6 |
0 |
u3 = 0 |
1[100] |
1 |
3 |
4 |
5 |
0 |
u4 = -1 |
3 |
3 |
2[200] |
2 |
7 |
0 |
u5 = 2 |
5 |
6[100] |
7 |
8 |
10 |
0[200] |
Опорний план не є оптимальним, тому що існують оцінки вільних клітин, для яких ui + vi > cij
Вибираємо максимальну оцінку вільної клітини . Для цього в перспективну клітку поставимо знак «+», а в решті вершинах багатокутника чергуються знаки «-», «+», «-».
|
1 |
2 |
3 |
4 |
5 |
6 |
Запаси |
1 |
1[0] |
2[0][-] |
3[0] |
4[0] |
8[300] |
0[0][+] |
300 |
2 |
4 |
5 |
6 |
2[200] |
6 |
0 |
200 |
3 |
1[100] |
1 |
3 |
4 |
5 |
0 |
100 |
4 |
3 |
3 |
2[200] |
2 |
7 |
0 |
200 |
5 |
5 |
6[100][+] |
7 |
8 |
10 |
0[200][-] |
300 |
Потреби |
100 |
100 |
200 |
200 |
300 |
200 |
|
З вантажів хij що стоять в мінусових клітинах, вибираємо найменше, тобто у = min =0. Додаємо 0 до обсягів вантажів, що стоять в плюсових клітинах і віднімаємо 0 з Хij, що стоять в мінусових клітинах. В результаті отримаємо новий опорний план.
|
1 |
2 |
3 |
4 |
5 |
6 |
Запаси |
1 |
1[0] |
2 |
3[0] |
4[0] |
8[300] |
0 |
300 |
2 |
4 |
5 |
6 |
2[200] |
6 |
0 |
200 |
3 |
1[100] |
1 |
3 |
4 |
5 |
0 |
100 |
4 |
3 |
3 |
2[200] |
2 |
7 |
0 |
200 |
5 |
5 |
6[100] |
7 |
8 |
10 |
0[200] |
300 |
Потреби |
100 |
100 |
200 |
200 |
300 |
200 |
|
Перевіримо оптимальність опорного плану. Знайдемо попередні потенціали ui, vi. по зайнятих клітинам таблиці, в яких ui + vi = cij, вважаючи, що u1 = 0.
|
v 1 = 1 |
v 2 = 2 |
v 3 = 3 |
v 4 = 4 |
v 5 = 8 |
v 6 = 0 |
u1 = 0 |
1[0] |
2 |
3[0] |
4[0] |
8 |
0[0] |
u2 = -2 |
4 |
5 |
6 |
2[200] |
6 |
0 |
u3 = 0 |
1[100] |
1 |
3 |
4 |
5 |
0 |
u4 = -1 |
3 |
3 |
2[200] |
2 |
7 |
0 |
u5 = 2 |
5 |
6[100] |
7 |
8 |
10 |
0[200] |
Опорний план не є оптимальним, тому що існують оцінки вільних клітин, для яких ui + vi > cij
Вибираємо максимальну оцінку вільної клітини. Для цього в перспективну клітку поставимо знак «+», а в решті вершинах багатокутника чергуються знаки «-», «+», «-».
|
1 |
2 |
3 |
4 |
5 |
6 |
Запаси |
1 |
1[0] |
2[0][-] |
3[0] |
4[0] |
8[300] |
0[0][-] |
300 |
2 |
4 |
5 |
6 |
2[200] |
6 |
0 |
200 |
3 |
1[100] |
1 |
3 |
4 |
5 |
0 |
100 |
4 |
3 |
3 |
2[200] |
2 |
7 |
0 |
200 |
5 |
5 |
6[100][+] |
7 |
8 |
10 |
0[200][+] |
300 |
Потреби |
100 |
100 |
200 |
200 |
300 |
200 |
|
З вантажів хij що стоять в мінусових клітинах, вибираємо найменше, тобто у = min (1, 2) = 0. Додаємо 0 до обсягів вантажів, що стоять в плюсових клітинах і віднімаємо 0 з Хij, що стоять в мінусових клітинах. В результаті отримаємо новий опорний план.
|
1 |
2 |
3 |
4 |
5 |
6 |
Запаси |
1 |
1[0] |
2[0] |
3[0] |
4[0] |
8[300] |
0[0] |
300 |
2 |
4 |
5 |
6 |
2[200] |
6 |
0 |
200 |
3 |
1[100] |
1 |
3 |
4 |
5 |
0 |
100 |
4 |
3 |
3 |
2[200] |
2 |
7 |
0 |
200 |
5 |
5 |
6[100] |
7 |
8 |
10 |
0[200] |
300 |
Потреби |
100 |
100 |
200 |
200 |
300 |
200 |
|
Перевіримо оптимальність опорного плану. Знайдемо попередні потенціали ui, vi. по зайнятих клітинам таблиці, в яких ui + vi = cij, вважаючи, що u1 = 0.
|
v 1 = 1 |
v 2 = 2 |
v 3 = 3 |
v 4 = 4 |
v 5 = 8 |
v 6 = 0 |
u1 = 0 |
1[0] |
2 |
3[0] |
4[0] |
8 |
0[0] |
u2 = -2 |
4 |
5 |
6 |
2[200] |
6 |
0 |
u3 = 0 |
1[100] |
1 |
3 |
4 |
5 |
0 |
u4 = -1 |
3 |
3 |
2[200] |
2 |
7 |
0 |
u5 = 2 |
5 |
6[100] |
7 |
8 |
10 |
0[200] |
Опорний план є оптимальним, так як всі оцінки вільних клітин задовольняють умові ui + vi <= cij.
Мінімальні витрати складуть:
F(x) = 1*100 + 2*200 + 2*20 + 2*200 + 6*100 + 0*200 =800