Лабораторна робота № 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

1. Вибираємо елемент Х1
Закріплюємо елемент Х1 в позиції Р1

Підраховуємо нижню границю
F11 = f 11н + f нн = r 11н * d 11н + r нн * d нн
r 11н = 0 1 2 3 r нн = 0 1 1 2 2 3
d 11н = 5 4 4 2 d нн = 3 3 2 2 2 1
___________ _________________
f 11н = 0+4+8+6 = 18 f нн = 0+3+2+4+4+3 = 16
F11 = 18 +16 = 34
Закріплюємо елемент Х1 в позиції Р2

Підраховуємо нижню границю
F12 = f 12н + f нн = r 12н * d 12н + r нн * d нн
r 12н = 0 1 2 3 r нн = 0 1 1 2 2 3
d 12н = 3 2 2 2 d нн = 5 4 4 3 2 1
___________ _________________
f 12н = 0+2+4+6 = 12 f нн = 0+4+4+6+4+3 = 21
F12 = 12 +21 = 33
Закріплюємо елемент Х1 в позиції Р3

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

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

2. Вибираємо елемент Х2.
2.1 Закріплюємо елемент Х2 в позиції Р1
Підраховуємо нижню границю
F21 = f 21н + f нн + f11н+ f212 =
= r 21н * d 21н + r нн * d нн + r11н * d11н + r2 12 * d2 12

r 21н = 0 2 3 r нн = 1 1 2
d 21н = 5 4 2 d нн = 3 2 1
________ ________
f 21н = 0+8+6 = 14 f нн = 3+2+2 = 7
r11н = 0 2 3 r212 = 1
d11н = 3 2 2 d212 = 4
________ ___
f11н = 0+4+6 = 10 f212 = 4 = 4
F21 = 14+7+10+4 = 35
2.2 Закріплюємо елемент Х2 в позиції Р2
Підраховуємо нижню границю
F22 = f 22н + fнн + f11н + f212 =
= r 22н * d 22н + r нн * d нн + r11н * d11н+ r212 * d212

r 22н = 0 2 3 r нн = 1 1 2
d 22н = 3 2 2 d нн = 5 4 1
________ ________
f 22н = 0+4+6 = 10 f нн = 5+4+2 = 11
r11н = 0 2 3 r212 = 1
d11н = 4 3 2 d212 = 2
________ ___
f11н = 0+6+6 = 12 f212 = 2 = 2
F22 = 10+11+12+2 = 34
2.3 Закріплюємо елемент Х2 в позиції Р4

Підраховуємо нижню границю
F24 = f24н + fнн + f11н + f212 =
= r24н * d24н + r нн * dнн + r11н * d11н+ r212 * d212

r24н = 0 2 3 rнн = 1 1 2
d24н = 4 2 1 dнн = 5 3 2
________ ________
f24н = 0+4+3 = 7 fнн = 5+3+4 = 12
r11н = 0 2 3 r212 = 1
d11н = 4 3 2 d212 = 2
________ ___
f11н = 0+6+6 = 12 f212 = 2 = 2
F24 = 7+12+12+2 = 33
2.4 Закріплюємо елемент Х2 в позиції Р5

Підраховуємо нижню границю
F25 = f25н + fнн + f11н + f212 =
= r25н * d25н + rнн * dнн + r11н * d11н+ r212 * d212

r25н = 0 2 3 r нн = 1 1 2
d25н = 5 3 1 d нн = 4 2 2
________ ________
f25н = 0+6+3 = 9 f нн = 4+2+4 = 10
r11н = 0 2 3 r212 = 1
d11н = 4 2 2 d212 = 3
________ ___
f11н = 0+4+6 = 10 f212 = 3 = 3
F25 = 9+10+10+3 = 32
Обираємо мінімальну нижню границю F25

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

3. Вибираємо елемент Х3.
Закріплюємо елемент Х3 в позиції Р1
Підраховуємо нижню границю
F31 = f31н + fнн + f11н + f213 + f12н + f223 =
= r31н * d31н + rнн * dнн +
+ r11н * d11н + r213 * d213 +
+ r12н * d12н + r223 * d223
r31н = 1 2 r нн = 1
d31н = 4 2 d нн = 2
_____ _
f31н = 4+4 = 8 f нн = 2 = 2
r11н = 0 3 r213 = 2
d11н = 2 2 d213 = 4
_____ ___
f11н = 0+6 = 6 f213 = 8 = 8
r12н = 0 2 r223 = 3
d12н = 3 1 d223 = 5
_____ ___
f12н = 0+2 = 2 f223 = 15 = 15
F31 = 8+2+6+8+2+15 = 41
Закріплюємо елемент Х3 в позиції Р2
Підраховуємо нижню границю
F32 = f 32н + fнн + f11н + f213 + f12н + f223 =
= r 32н * d 32н + r нн * d нн +
+ r11н * d11н+ r213 * d2 13 +
+ r12н * d12н+ r223 * d223
r32н = 1 2 r нн = 1
d32н = 2 2 d нн = 4
_____
f32н = 2+4 = 6 f нн = 4
r11н = 0 3 r213 = 2
d11н = 4 2 d213 = 2
_____ ___
f11н = 0+6 = 6 f213 = 4 = 4
r12н = 0 2 r223 = 3
d12н = 5 1 d223 = 3
_____ ___
f12н = 0+2 = 2 f223 = 9 = 9
F32 = 6+4+6+4+2+9 = 31
F32 = Fmin => Подальше переміщення елемента Х3 припиняємо.

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

4. Вибираємо елемент Х4.
Закріплюємо елемент Х4 в позиції Р1
Підраховуємо нижню границю
F41 = f 41н + fнн + f11н + f214 + f12н + f224 + f13н + f234 =
= r41н * d41н + rнн * d нн +
+ r11н * d11н + r214 * d214 +
+ r12н * d12н + r224 * d224 +
+ r13н * d13н + r234 * d234
r 41н = 1 d 41н = 4 f 41н = 4
r11н = 3 d11н = 2 f11н = 6
r214 = 0 d214 = 4 f214 = 0
r12н = 2 d12н = 1 r12н = 2
r224 = 0 d224 = 5 r224 = 0
r13н = 2 d13н = 2 f13н = 4
r134 = 1 d234 = 2 f 34 = 2
F41 = 4+6+2+4+2 = 18
Закріплюємо елемент Х4 в позиції Р4
Підраховуємо нижню границю
F44 = f44н + fнн + f11н + f214 + f12н + f224 + f13н + f234 =
= r44н * d44н + rнн * dнн +
+ r11н * d11н + r214 * d214 +
+ r12н * d12н + r224 * d224 +
+ r13н * d13н + r234 * d234
r 44н = 1 d44н = 4 f44н = 4
r11н = 3 d11н = 4 f11н = 12
r214 = 0 d214 = 2 f214 = 0
r12н = 2 d12н = 5 f12н = 10
r224 = 0 d224 = f224 = 0
r13н = 2 d13н = 2 f13н = 4
r234 = 1 d234 = 2 f234 = 2
F44 = 4+12+10+4+2 = 32
Обираємо мінімальну нижню границю F41
Фіксуємо елемент Х4 в позиції Р1
Фіксуємо елемент Х5 в позиції Р4
Підраховуємо сумарну довжину з'єднань
Fсум = 1*3+2*2+0*4+3*2 + 3*3+0*5+2*2 + 1*2+2*2 + 1*4 = 3+4+6+9+4+2+4+4 = 36