- •1 Розробка плану проекту
- •1.1 Аналіз та постановка задачі
- •1.2 Обґрунтування вибору моделі життєвого циклу для реалізації проекту
- •1.2.1 Каскадна модель.
- •1.2.2 Ітераційна модель.
- •1.2.3 Спіральна модель.
- •1.3 Обґрунтування вибору мови програмування та case-засобів
- •1.4 Розробка графіка виконання робіт по проекту у контексті обраної моделі життєвого циклу
- •1.5 Аналіз ризиків проекту та управління ними
- •1.6 Системна специфікація вимог до розроблюваного проекту
- •1.6.1 Розробка користувальницьких (функційних) вимог
- •1.6.2 Нефункційні вимоги до програмного забезпечення
- •2 Вибір та аналіз існуючих алгоритмів побудови шляху на карті
- •2.1 Точні алгоритми
- •2.1.1 Пошук в ширину на незваженому графі.
- •2.1.2 Алгоритм Флойда-Уоршелла
- •2.1.3 Алгоритм Дейкстри
- •2.2 Евристичні алгоритми
- •2.2.1 Алгоритм a*
- •2.2.2 Алгоритм d* Lite
- •3 Розробка архітектури програмного забезпечення
- •3.1.1 Діаграма варіантів використання
- •3.1.2 Діаграма класів
- •3.1.3 Діаграма станів
- •3.1.4 Діаграма діяльності
- •3.2 Блок-схеми алгоритмічної частини програмного забезпечення
- •4 Кодування і тестування пз
- •4.1 Особливості реалізації програмного забезпечення
- •4.2 Допоміжні засоби для реалізації програмного забезпечення
- •4.3 Тестування пз
- •4.4 Представлення результатів тестування пз (у хронологічному порядку, які помилки були виявлені і виправлені)
- •4.5 Представлення результатів, що демонструють функціональність розробленого пз
- •4.6 Основні функції розробленого програмного забезпечення
- •5 Надійність програмного забезпечення
- •5.1 Поняття надійності програмного забезпечення
- •5.2 Класифікація моделей надійності програмного забезпечення
- •5.3 Розрахункова частина
- •6 Економічний розділ
- •6.1 Обґрунтування доцільності створення локальної мережі
- •6.2 Кошторис на розробку програмного продукту
- •6.2.1 Основна заробітна плата розробників (дослідників):
- •6.2.2 Амортизація обладнання, комп'ютерів та приміщень, які використовувались для розробки нового технічного рішення.
- •6.2.3 Оренда обладнання, устаткування, приміщень, які були використані в ході здійснення розробки нового технічного рішення.
- •6.2.4 Витрати на комплектуючі к, що були використані на розробку нового технічного рішення, розраховуються за формулою:
- •7.2 Забезпечення електробезпеки при експлуатації комп’ютерної техніки
- •7.3 Розрахунок загального штучного рівномірного освітлення приміщення люмінесцентними лампами методом коефіцієнта використання світлового потоку
- •Висновки
- •Перелік посилань
2.2 Евристичні алгоритми
Евристичний алгоритм - це алгоритм, спроможний видати прийнятне рішення проблеми серед багатьох рішень, але неспроможний гарантувати, що це рішення буде найкращим. Отже, такі алгоритми є приблизними і неточними. Зазвичай такі алгоритми знаходять рішення, близьке до найкращого і роблять це швидко. Іноді такий алгоритм може бути точним, тобто він знаходить дійсно найкраще рішення, але він все одно буде називатися евристичним доти, доки не буде доведено, що рішення дійсно найкраще.
Використання евристичних, а не точних, алгоритмів для пошуку траєкторії руху мобільного робота на динамічно змінній місцевості може призвести до зростання швидкодії та мінімізації випадків, коли час, відведений на обрахунок траєкторії руху перевищує час, за який ситуація на карті змінюється.
2.2.1 Алгоритм a*
Даний алгоритм є алгоритмом пошуку по першому найкращому збігу на графі, який знаходить маршрут з найменшою вартістю від однієї вершини (початкової) до іншої (цільової, кінцевої).
Порядок обходу вершин визначається евристичною функцією «відстань плюс вартість» (зазвичай позначається як f(x)). Ця функція - сума двох інших: функції вартості досягнення розглянутої вершини (x) з початкової (зазвичай позначається як g(x) і може бути як евристичною, так і звичайною) і евристичної оцінки відстані від розглянутої вершини до кінцевої (позначається як h(x )).
Функція h(x) повинна бути припустимою евристичною оцінкою, тобто не повинна переоцінювати відстані до цільової вершині. Наприклад, для задачі маршрутизації h(x) може являти собою відстань до цілі по прямій лінії, так як це фізично найменша можлива відстань між двома точками.
Алгоритм використовує допоміжну функцію (евристику), аби вказувати напрям пошуку та скорочувати його тривалість. Алгоритм повний в тому сенсі, що завжди знаходить оптимальний шлях при умові його існування.
A* покроково переглядає всі шляхи, що ведуть від початкової вершини в кінцеву, поки не знайде мінімальний. Як і всі інформовані алгоритми пошуку, він переглядає спочатку ті маршрути, які «здаються» ведуть до мети. Від жадібного алгоритму (який теж є алгоритмом пошуку за першим кращим збігом) його відрізняє те, що при виборі вершини він враховує, крім іншого, весь пройдений до неї шлях (складова g(x) - це вартість шляху від початкової вершини, а не від попередньої, як в жадібному алгоритмі). На початку роботи проглядаються вузли, суміжні з початковим; вибирається той з них, який має мінімальне значення f(x), після чого цей вузол розкривається. На кожному етапі алгоритм оперує з безліччю шляхів з початкової точки до всіх ще не розкритих (листових) вершин графа («безліччю приватних рішень»), які розміщуються у черзі з пріоритетом. Пріоритет шляху визначається за значенням f(x) = g(x) + h(x). Алгоритм продовжує свою роботу до тих пір, поки значення f(x) цільової вершини не виявиться меншим, ніж будь-яке значення в черзі (або поки все дерево не буде переглянуто). З множинних рішень вибирається рішення з найменшою вартістю.
Як і точні алгоритми, A* є повним в тому сенсі, що він завжди знаходить рішення, якщо таке існує [10].
Якщо евристична функція h допустима, тобто ніколи не переоцінює дійсну мінімальну вартість досягнення мети, то A* сам є допустимим (або оптимальним), також за умови, що ми не відсікаємо пройдені вершини. Якщо ж ми це робимо, то для оптимальності алгоритму потрібно, щоб h(x) була ще й монотонною, або наслідуючою евристикою. Властивість монотонності означає, що якщо існують шляхи A-B-C і A-C (не обов'язково через B), то оцінка вартості шляху від A до C повинна бути менше або дорівнює сумі оцінок шляхів A-B і B-C. (Монотонність також відома як нерівність трикутника: одна сторона трикутника не може бути довше, ніж сума двох інших сторін.) Математично, для всіх шляхів x, y (де y - нащадок x) виконується:
g(x) + h(x) ≤ g(y) + h(y)...................................................(2.5)
A* також оптимально ефективний для заданої евристики h. Це означає, що будь-який інший алгоритм досліджує не менше вузлів, ніж A * (за винятком випадків, коли існує кілька виняткових рішень з однаковою евристикою, точно відповідної вартості оптимального шляху).
У той час як A* оптимальний для «випадково» заданих графів, немає гарантії, що він зробить свою роботу краще, ніж більш прості, але і більш інформовані щодо проблемної області алгоритми. Наприклад, в деякому лабіринті може знадобитися спочатку йти у напрямку від виходу, і тільки потім повернути назад. У цьому випадку обстеження спочатку тих вершин, які розташовані ближче до виходу (по прямій дистанції), буде втратою часу.
