Лабораторна робота № 5
"Побудова алгоритмів ефективних за часовою складністю.
Задача квадратичного призначення".
Мета роботи : Ознайомлення зі способом зменшення часової складності.
Зміст роботи:
I. Теоритична частина.
Основні поняття та визначення
Алгоритми з експоненціальною складністю.
Евристичні алгоритми.
Формулювання задачі квадратичного призначення.
Метод гілок та границь.
Способ підрахунку нижніх границь.
II. Практична частина
Використовуючи запропонований алгоритм, для заданого робочого поля і матриці зв'язності знайти оптимальне розташування елементів на робочому полі.
Скласти програму (Pascal , C).
Порівняти часову і програмну складність алгоритмів повного перебору і побудованого алгоритму.
III. Висновки.
_______________________________________________________________________________
EMBED Equation.3
В алгоритмах з експоненціальною складністю кількість операцій, необхідних для розв'язання задачі, зростає швидше, ніж поліном к- ї степені при зростанні розміру входу.
Розв'язання задач на сучасному компютері вже для n > 20, (наприклад при О(n!)) є проблематичним.
Одним із способів зменшення часової складності є використання евристичних алгоритмів. Евристичні алгоритми дозволяють вирішувати складні задачі за прийнятний час за рахунок зведення задачі з експоненціальною складністю до задачі з поліноміальною складністю, хоча не завжди дозволяють отримати точне рішення.
Задача квадратичного призначення (ЗКП) розглядається як приклад побудови алгоритму ефективного за часовою складністю.
Формулювання задачі
Задані m елементів x1, x1, … , xm. Для кожної пари елементів задані вагові коефіцієнти
rij (i,j =1,2,…,m) ,
які визначають степінь зв'язності елементів. Розташувати елементи на дискретному робочому полі за критерієм мінімальної сумарної довжини з'єднань.
Вагові коефіцієнти задані матрицею R = || rij ||m x m, rij – кількість зв'язків між елементами xi і xj
Дискретне робоче поле (ДРП) – це набір фіксованих позицій, в яких розміщуються елементи xi.
Відстані між позиціями ДРП задаються в ортогональній метриці, причому відстань між сусідніми позиціями по горизонталі та вертикалі дорівнює 1.
Матриця відстаней ДРП : D = || dij ||n x n
Вважати, що n = m (кількість елементів дорівнює кількості позицій).
Необхідно так розташувати елементи на ДРП, щоб мінімізувати цільову функцію
EMBED Equation.3

Розглянемо алгоритм рішення ЗКП, який грунтується на методі "гілок та границь".
Основна ідея методу "гілок та границь" полягає в тому, що вся множина допустимих рішень задачі розбивається на деякі підмножини, всередені яких здійснюється впорядкований перегляд рішень з метою вибору оптимального.
EMBED Visio.Drawing.5
Рис. 1
Стосовно ЗКП метод "гілок та границь" полягає в наступному:
Кількість можливих розміщень елементів P0 розбивається на рівні за потужністю підмножини (P11…P1n) .
Для кожної підмножини підраховується "нижня границя" Fij.
Обирається та підмножина, яка має мінімальне значення "нижньої границі", решта підмножин відкидається з розгляду. Обраний елемент фіксується в позиції, яка відповідає мінімальній "нижній границі".
Перехід до п1. для обраної підмножини.
п1 –п4 повторюються, доки не будуть відкинуті всі рішення крім оптимального.

Утворення підмножин:
1. З множини нерозташованих елементів обирається будь-який елемент, наприклад перший за
нумерацією (X1) і закріплюється в будь-якій вільній позиції ДРП, наприклад першій за нумерацією (рис.1)
2 Обраний елемент переміщується в іншу вільну позицію.
3. П1.1-п1.2 повторюється, доки почерговим закріпленням не будуть охоплені всі вільні позиції
ДРП.
На рис.1 розміщення X1p(i), X2p(j), … , Xnp(k) є оптимальним.
Підрахунок “нижніх границь”.
Підрахунок “нижніх границь” грунтується на наступній властивості:
Якщо r = (r1, r2, . . . , rn) і d = (d1, d2, . . . , dn) – два вектора, то мінімум скалярного добутку r*d відповідає розташуванню складових вектора r у зростаючому, а складових вектора d у спадаючому порядку.
Таким чином, “нижня границя” може бути отримана із верхніх половин матриць R і D, елементи яких утворюють вектори r і d , причому, складові вектора r розташовані у зростаючому порядку, а складові вектора d у спадаючому порядку.




Приклад.
Задане дискретне робоче поле ДРП і матриця зв'язності R.

ДРП
R
Розташувати елементи X1, X2, X3, X4, X5 на ДРП за критерієм мінімальної сумарної довжини з'єднань.
________________________________________________________
Позначимо номера позицій в правому верхньому куті вільних позицій
ДРП
Визначемо матрицю відстаней D:
D
Підрахуємо мінімальну нижню границю Fmin = r*d
r = 0 0 1 1 1 2 2 2 3 3
d = 5 4 4 3 3 2 2 2 2 1
_____________________________
0+0+4+3+3+4+4+4+6+3 = 31
r – вектор зв'язків між елементами
d - вектор відстаней між позиціями елементів
Будемо розрізняти три типи елементів : "незакріплені", "закріплегні" в певній позиції та "зафіксовані".
1. Вибираємо елемент Х1
Закріплюємо елемент Х1 в позиції Р1

Підраховуємо нижню границю
F1(1) = f н,н + f 1(1),н = r н,н * d н,н + r 1(1),н * d 1(1),н
r 1(1),н = 0 1 2 3 r н,н = 0 1 1 2 2 3
d 1(1),н = 5 4 4 2 d н,н = 3 3 2 2 2 1
___________ _________________
f 1(1),н = 0+4+8+6 = 18 f н,н = 0+3+2+4+4+3 = 16
F1(1) = 18 +16 = 34
F1(1) – нижня границя для розташування, в якому елемент Х1 закріплений в позиції (1)
f н,н – скалярний добуток для незакріплених елементів
f 1(1),н - скалярний добуток для закріпленого елемента Х1 в позиції Р1 та незакріплених елементів .
(F1(1) > Fmin ), тому переміщуємо елемент Х1 в наступну вільну позицію.
Наприклад, в позицію Р2.
Закріплюємо елемент Х1 в позиції Р2

Підраховуємо нижню границю
F1(2) = f нн + f 1(2),н = r н,н * d н,н + r 1(2),н * d 1(2),н
r 1(2),н = 0 1 2 3 r н,н = 0 1 1 2 2 3
d 1(2),н = 3 2 2 2 d н,н = 5 4 4 3 2 1
___________ _________________
f 1(2),н = 0+2+4+6 = 12 f н,н = 0+4+4+6+4+3 = 21
F1(1) = 12 +21 = 33
(F1(2) > Fmin ), тому переміщуємо елемент Х1 в наступну вільну позицію.
Наприклад, в позицію Р3.
Закріплюємо елемент Х1 в позиції Р3

Підраховуємо нижню границю
F1(3) = f н,н + f 1(3),н = r н,н * d н,н + r 1(3),н * d 1(3),н
r 1(3),н = 0 1 2 3 r н,н = 0 1 1 2 2 3
d 1(3),н = 4 3 2 2 d н,н = 5 4 3 2 2 1
___________ _________________
f 1(3),н = 0+3+4+6 = 13 f н,н = 0+4+3+4+4+3 = 18
F1(3) = 13 +18 = 31
F13 = Fmin => Подальше переміщення елемента Х1 припиняємо.

Фіксуємо елемент Х1 в позиції Р3

2. Вибираємо елемент Х2.
2.1 Закріплюємо елемент Х2 в позиції Р1
Підраховуємо нижню границю
F2(1) = f н, н + f 1(3), н + f 2(1), н + f 1(3), 2(1)
F2(1) = rн,н * d н,н + r1(3), н * d 1(3), н + r2(1), н* d2(1), н + r1(3), 2(1) * d1(3), 2(1)

r 2(1),н = 0 2 3 r н,н = 1 1 2
d 2(1),н = 5 4 2 d н,н = 3 2 1
________ ________
f 2(1),н = 0+8+6 = 14 f н,н = 3+2+2 = 7
r2(1),н = 0 2 3 r1(3), 2(1) = 1
d2(1),н = 3 2 2 d1(3), 2(1) = 4
________ ___
f2(1),н = 0+4+6 = 10 f1(3), 2(1) = 4 = 4
F2(1) = 14+7+10+4 = 35
(F2(1) > Fmin ), тому переміщуємо елемент Х2 в наступну вільну позицію.
Наприклад, в позицію Р2.
2.2 Закріплюємо елемент Х2 в позиції Р2
Підраховуємо нижню границю
F2(2) = f н, н + f 1(3), н + f 2(2), н + f 1(3), 2(2)
F2(2) = rн,н * d н,н + r1(3), н * d 1(3), н + r2(2), н* d2(2), н + r1(3), 2(2) * d1(3), 2(2)

r 2(2),н = 0 2 3 r н,н = 1 1 2
d 2(2),н = 3 2 2 d н,н = 5 4 1
________ ________
f 2(2),н = 0+4+6 = 10 f н,н = 5+4+2 = 11
r1(3), н = 0 2 3 r1(3), 2(2) = 1
d1(3), н = 4 3 2 d1(3), 2(2) = 2
________ ___
f1(3), н = 0+6+6 = 12 f1(3), 2(2) = 2 = 2
F2(2) = 10+11+12+2 = 34
(F2(2) > Fmin ), тому переміщуємо елемент Х2 в наступну вільну позицію.
Наприклад, в позицію Р4.
2.3 Закріплюємо елемент Х2 в позиції Р4

Підраховуємо нижню границю
F2(4) = f н, н + f 1(3), н + f 2(4), н + f 1(3), 2(4)
F2(4) = rн,н * d н,н + r1(3), н * d 1(3), н + r2(4), н* d2(4), н + r1(3), 2(4) * d1(3), 2(4)

r2(4),н = 0 2 3 rн,н = 1 1 2
d2(4),н = 4 2 1 dн,н = 5 3 2
________ ________
f2(4),н = 0+4+3 = 7 fн,н = 5+3+4 = 12
r1(3), н = 0 2 3 r1(3), 2(4) = 1
d1(3), н = 4 3 2 d1(3), 2(4) = 2
________ ___
f1(3), н = 0+6+6 = 12 f1(3), 2(4) = 2 = 2
F2(4) = 7+12+12+2 = 33
(F2(4) > Fmin ), тому переміщуємо елемент Х2 в наступну вільну позицію - Р5.
2.4 Закріплюємо елемент Х2 в позиції Р5

Підраховуємо нижню границю
F2(5) = f н, н + f 1(3), н + f 2(5), н + f 1(3), 2(5)
F2(5) = rн,н * d н,н + r1(3), н * d 1(3), н + r2(5), н* d2(5), н + r1(3), 2(5) * d1(3), 2(5)

r 2(5), н = 0 2 3 r н,н = 1 1 2
d 2(5), н = 5 3 1 d н,н = 4 2 2
________ ________
f 2(5), н = 0+6+3 = 9 f н,н = 4+2+4 = 10
r 1(3), н = 0 2 3 r1(3), 2(5) = 1
d1(3), н = 4 2 2 d1(3), 2(5) = 3
________ ___
f1(3), н = 0+4+6 = 10 f1(3), 2(5) = 3 = 3
F2(5) = 9+10+10+3 = 32
(F2(1) >F2(2) >F2(4) >F2(5) >Fmin )
Обираємо меншу нижню границю - F2(5)

Фіксуємо елемент Х2 в позиції Р5

3. Вибираємо елемент Х3.
Закріплюємо елемент Х3 в позиції Р1
Підраховуємо нижню границю
F3(1) = fн,н + f3(1) ,н + f3(1),1(3) + f3(1),2(5) + f1(3),н + f2(5),н + f1(3),2(5)


r3(1),н = 1 2 r н,н = 1 r1(3),2(5) = 1
d3(1),н = 4 2 d н,н = 2 d1(3),2(5) = 3
_____ __ __
f3(1),н = 4+4 = 8 f н,н = 2 = 2 f1(3),2(5) = 3 = 3
r1(3),н = 0 3 r3(1),1(3) = 2
d1(3),н = 2 2 d3(1),1(3) = 4
_____ ___
f1(3),н = 0+6 = 6 f3(1),1(3) = 8 = 8
r2(5),н = 0 2 r3(1),2(5) = 3
d2(5),н = 3 1 d 3(1),2(5) = 5
_____ ___
f2(5),н = 0+2 = 2 f3(1),2(5) = 15 = 15
F3(1) = 8+2+3+6+8+2+15 = 44
(F3(1) > Fmin ), тому переміщуємо елемент Х3 в наступну вільну позицію.
Наприклад, в позицію Р2.
Закріплюємо елемент Х3 в позиції Р2
Підраховуємо нижню границю
F3(2) = fн,н + f3(2) ,н + f3(2),1(3) + f3(2),2(5) + f1(3),н + f2(5),н + f1(3),2(5)


r3(2),н = 1 2 r н,н = 1 r1(3),2(5) = 1
d3(2),н = 2 2 d н,н = 4 d1(3),2(5) = 3
_____ __ __
f3(2),н = 2+4 = 6 f н,н = 4 = 4 f1(3),2(5) = 3 = 3
r1(3),н = 0 3 r3(2),1(3) = 2
d1(3),н = 4 2 d3(2),1(3) = 2
_____ ___
f1(3),н = 0+6 = 6 f3(2),1(3) = 4 = 4
r2(5),н = 0 2 r3(2),2(5) = 3
d2(5),н = 5 1 d 3(2),2(5) = 3
_____ ___
f2(5),н = 0+2 = 2 f3(2),2(5) = 9 = 9
F3(2) = 6+4+3+6+4+2+9 = 34
(F3(2) > Fmin ), тому переміщуємо елемент Х3 в наступну вільну позицію - Р4.

Закріплюємо елемент Х3 в позиції Р4
Підраховуємо нижню границю
F3(4) = fн,н + f3(4) ,н + f3(4),1(3) + f3(4),2(5) + f1(3),н + f2(5),н + f1(3),2(5)


r3(4),н = 1 2 r н,н = 1 r1(3),2(5) = 1
d3(4),н = 4 2 d н,н = 2 d1(3),2(5) = 3
_____ __ __
f3(4),н = 4+4 = 8 f н,н = 2 = 2 f1(3),2(5) = 3 = 3
r1(3),н = 0 3 r3(4),1(3) = 2
d1(3),н = 4 2 d3(4),1(3) = 2
_____ ___
f1(3),н = 0+6 = 6 f3(4),1(3) = 4 = 4
r2(5),н = 0 2 r3(4),2(5) = 3
d2(5),н = 5 3 d 3(4),2(5) = 1
_____ ___
f2(5),н = 0+6 = 6 f3(4),2(5) = 3 = 3
F3(4) = 8+2+3+6+4+6+3 = 32
(F3(1) >F3(2) >F3(4) > Fmin )
Обираємо меншу нижню границю - F3(4)

Фіксуємо елемент Х3 в позиції Р4

4. Вибираємо елемент Х4.
Закріплюємо елемент Х4 в позиції Р1
Підраховуємо нижню границю
F4(1) = f 4(1),н + f4(1), 1(3) + f4(1), 1(5) + f4(1), 3(4) +
f1(3), н + f2(5), н + f3(4), н + f1(3), 2(5) + f1(3), 3(4) + f2(5),3(4)

r 4(1),н = 1 d 4(1),н = 2 f 4(1),н = 2
r4(1) , 1(3) = 0 d4(1) , 1(3) = 4 f4(1) , 1(3) = 0
r4(1) , 2(5) = 0 d4(1) , 2(5) = 5 f4(1) , 2(5) = 0
r4(1) , 3(4) = 1 d4(1) , 3(4) = 4 f4(1) , 2(5) = 4
r 1(3), н = 3 d1(3), н = 2 f1(3), н = 6
r 2(5) , н = 2 d2(5) , н = 2 f2(5) , н = 4
r 3(4) , н = 2 d3(4) , н = 3 f3(4) , н = 6
r 1(3) , 2(5) = 1 d1(3) , 2(5) = 3 f1(3) , 2(5) = 3
r 2(5) , 3(4) = 3 d2(5) , 3(4) = 1 f2(5) , 3(4) = 3
r1(3) , 3(4) = 2 d1(3) , 3(4) = 2 f1(3) , 3(4) = 4
F4(1) = 2 +0+0+4+6+4+6+3+3+4 = 32
Враховуючи, що F3(4) = F4(1)
Фіксуємо елемент Х4 в позиції Р1
Фіксуємо елемент Х5 в позиції Р2
Підраховуємо сумарну довжину з'єднань
Fсум = 1*3+2*2+0*4+3*2 + 3*1+0*5+2*3 + 1*4+2*2 + 1*2 = 3+4+0+6+3+0+6+4+4+2 = 32