Please use this identifier to cite or link to this item: https://er.chdtu.edu.ua/handle/ChSTU/9065
Назва: Агентно-орієнтована інформаційна система на основі нейронних мереж
Автори: Немченко , Вадим В'ячеславович
Ємелянов, Сергій Андрійович
Ключові слова: АГЕГТНО-ОРІЄНТОВАНІ СИСТЕМИ,;НЕЙРОННІ МЕРЕЖІ;АПРОКСИМАЦІЯ;БАГАТОШАРОВИЙ ПЕРСЕПТРОН;AGENT-ORIENTED SYSTEMS;NEURAL NETWORKS;APPROXIMATION;MULTILAYER PERCEPTRON
Дата публікації: 20-гру-2023
Короткий огляд (реферат): Ємелянов С. А. Агентно-орієнтована інформаційна система на основі нейронних мереж 121 «Інженерія програмного забезпечення» Черкаський державний технологічний університет Черкаси 2023 У роботі детально розглядається використання нейронних мереж для задачі апроксимації та їхнє інтегрування в агентну архітектуру. Проведено дослідження різних типів апроксимаційних завдань, таких як апроксимація функцій, обробка сигналів та прогнозування тенденцій, з використанням розробленої системи.
ANNOTATION Yemelianov S. A. Agent-oriented information system based on neural networks 121 "Software engineering" Cherkasy State Technological University Cherkasy 2023 This reasearch paper extensively examines the utilization of neural networks for the task of approximation and their integration into agent-based architecture. Various types of approximation tasks, such as function approximation, signal processing, and trend forecasting, have been investigated using the developed system.
URI (Уніфікований ідентифікатор ресурсу): https://er.chdtu.edu.ua/handle/ChSTU/9065
Розташовується у зібраннях:121 Інженерія програмного забезпечення (Інженерія програмного забезпечення)

Файли цього матеріалу:
Файл Опис РозмірФормат 
Кваліфікаційна робота магістра Ємелянов Сергій Андрійович.pdf
  Restricted Access
2.09 MBAdobe PDFПереглянути/Відкрити    Запит копії


Усі матеріали в архіві електронних ресурсів захищено авторським правом, усі права збережено.

Extracted text
ЧДТУ.232228.09 ПЗ 
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ 
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ 
Факультет інформаційних технологій і систем 
Кафедра програмного забезпечення автоматизованих систем 
 
 
ПОЯСНЮВАЛЬНА ЗАПИСКА 
до кваліфікаційної роботи 
«магістра» 
освітній рівень 
 
на тему:  Агентно-орієнтована інформаційна система на основі нейронних 
мереж 
 
 
Виконав: студент 2 курсу, групи МПЗ-2204 
Напряму підготовки  
121 «Інженерія програмного забезпечення»  
(шифр і назва напряму підготовки) 
 
 
Студент Ємелянов С.А. 
 (прізвище та ініціали) 
Керівник Немченко В.В. 
 (прізвище та ініціали) 
Рецензент Масловатий Р.Ю. 
 (прізвище та ініціали) 
 
 
Черкаси 2023 
ЧДТУ.232228.09 ПЗ 
АНОТАЦІЯ 
Ємелянов С. А. 
Агентно-орієнтована інформаційна система на основі нейронних мереж 
121 «Інженерія програмного забезпечення» 
Черкаський державний технологічний університет 
Черкаси 2023 
У роботі детально розглядається використання нейронних мереж для 
задачі апроксимації та їхнє інтегрування в агентну архітектуру. Проведено 
дослідження різних типів апроксимаційних завдань, таких як апроксимація 
функцій, обробка сигналів та прогнозування тенденцій, з використанням 
розробленої системи. 
Ключові слова: АГЕГТНО-ОРІЄНТОВАНІ СИСТЕМИ, НЕЙРОННІ 
МЕРЕЖІ, АПРОКСИМАЦІЯ, БАГАТОШАРОВИЙ ПЕРСЕПТРОН 
ANNOTATION 
Yemelianov S. A. 
Agent-oriented information system based on neural networks 
121 "Software engineering" 
Cherkasy State Technological University 
Cherkasy 2023 
This reasearch paper extensively examines the utilization of neural networks for 
the task of approximation and their integration into agent-based architecture. Various 
types of approximation tasks, such as function approximation, signal processing, and 
trend forecasting, have been investigated using the developed system. 
Keywords: AGENT-ORIENTED SYSTEMS, NEURAL NETWORKS, 
APPROXIMATION, MULTILAYER PERCEPTRON. 
ЧДТУ.232228.09 ПЗ 
ЗМІСТ 
ПЕРЕЛІК УМОВНИХ СКОРОЧЕНЬ.........................................................................5 
ВСТУП ..........................................................................................................................6 
РОЗДІЛ 1 ІСНУЮЧІ МЕТОДИ ТА ЗАСОБИ РОЗВ’ЯЗАННЯ ПОСТАВЛЕНИХ 
ЗАВДАНЬ .....................................................................................................................8 
1.1 Огляд існуючих методів та засобів ................................................................8 
1.1.1 Мови програмування та бібліотеки для нейронних мереж ................8 
1.1.2 Методи навчання агентів .......................................................................8 
1.1.3 Типи нейронних мереж ........................................................................12 
1.2 Аналіз їхнього застосування в схожих дослідженнях ...............................15 
1.2.1 Аналіз застосування згорткових нейронних мереж ..........................16 
1.2.2 Аналіз застосування рекурентних нейронних мереж .......................17 
1.2.3 Аналіз застосування багатошарових персептронів...........................17 
1.2.4 Аналіз застосування генеративних нейронних мереж .....................18 
Висновки до розділу ............................................................................................20 
РОЗДІЛ 2 ТЕОРЕТИЧНІ ТА ЕКСПЕРИМЕНТАЛЬНІ ДОСЛІДЖЕННЯ ...........21 
2.1 Теоретичні дослідження ...............................................................................21 
2.2 Експериментальні дослідження ...................................................................23 
Висновки до розділу ............................................................................................28 
РОЗДІЛ 3 ВПРОВАДЖЕННЯ РЕЗУДЬТАТІВ ДОСЛІДЖЕНЬ У ПРАКТИКУ 
ПРОЕКТУВАННЯ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ.......................................29 
3.1 Моделювання предметної області ...............................................................29 
3.1.1 Модель предметної області. Словник предметної області ..............29 
3.1.2 Елементи моделювання предметної області .....................................30 
3.1.3 Робоча область моделювання..............................................................33 
3.2 Формування та аналіз вимог.........................................................................35 
3.2.1 Первинні вимоги замовника ................................................................35 
3.2.2 Детальні вимоги розробника ...............................................................36 
3.2.3 Функціональні вимоги .........................................................................36 
3.2.4 Нефункціональні вимоги .....................................................................36 
3.3 Формування та аналіз вимог за допомогою діаграми прецедентів ..........37 
 2 
ЧДТУ.232228.09 ПЗ 
3.4. Проєктування логічної структури системи ................................................39 
3.4.1 Діаграма класів .....................................................................................39 
3.4.2 Діаграма пакетів ...................................................................................40 
3.5 Архітектурне проєктування ..........................................................................41 
3.5.1 Діаграма компонентів ..........................................................................42 
3.5.2 Розгортання програмної системи на апаратних засобах. Діаграма 
розгорттання ..................................................................................................43 
3.6 Моделювання поведінки системи ................................................................44 
3.6.1 Діаграма діяльності ..............................................................................45 
3.6.2 Діаграма послідовності ........................................................................46 
3.6.3 Діаграма комунікації ............................................................................46 
3.6.4 Діаграма скінченного автомату ..........................................................47 
Висновки до розділу ............................................................................................49 
РОЗДІЛ 4 РОЗРОБКА І ТЕСТУВАННЯ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ ...50 
4.1 Розробка програмного комплексу ................................................................50 
4.1.1 Обґрунтування вибору засобів реалізації ..........................................50 
4.1.2 Опис структурної (функціональної) схеми ........................................51 
4.1.3 Опис логічної схеми системи ..............................................................53 
4.1.4 Розробка бази даних .............................................................................56 
4.1.5 Розробка інтерфейсу користувача ......................................................56 
4.1.6 Опис розробки програмних компонентів ..........................................58 
4.2 Тестування системи .......................................................................................62 
4.2.1 Модульне тестування ...........................................................................63 
4.2.2 Інтеграційне тестування ......................................................................66 
4.2.3 Системне тестування ...........................................................................69 
4.2.4 Приймальне тестування .......................................................................71 
4.3 Приклади впровадження програмного комплексу .....................................71 
Висновки до розділу ............................................................................................72 
ВИСНОВКИ ...............................................................................................................73 
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ ..................................................................75 
ДОДАТОК А ..............................................................................................................76 
ДОДАТОК Б ...............................................................................................................78 
 3 
ЧДТУ.232228.09 ПЗ 
  
 4 
ЧДТУ.232228.09 ПЗ 
ПЕРЕЛІК УМОВНИХ СКОРОЧЕНЬ 
БШП  багатошаровий персептрон 
RL  Reinforcement Learning 
RNN  Recurent Neural Networks 
CNN  Convolutional Neural Networks 
LSTM Long Short-Term Memory 
GRU  Gated Recurrent Unit 
GAN  Generative Adversarial Networks 
MSE  Mean Square Error 
MAE  Mean Absolute Error 
MLP  Multi-Layer Perceptrons 
  
 5 
ЧДТУ.232228.09 ПЗ 
ВСТУП 
Сучасний етап розвитку інформаційних технологій супроводжується 
стрімким ростом обсягів даних та поширенням використання штучного 
інтелекту у найрізноманітніших галузях. Реалізація потенціалу нейронних 
мереж, що є ключовим елементом штучного інтелекту, стає все більш важливим 
завданням для розробників інформаційних систем. У цьому контексті, розробка 
агентно-орієнтованої інформаційної системи, базованої на нейронних мережах, 
набуває особливого значення. 
Актуальність даної магістерської роботи полягає в необхідності 
вирішення складних завдань обробки та аналізу даних в умовах сучасного 
інформаційного потоку. Використання агентно-орієнтованих систем спільно з 
нейронними мережами може надати ефективні та гнучкі рішення для цих 
завдань, що робить об'єкт та предмет дослідження вкрай актуальними в контексті 
сучасних викликів у галузі інформаційних технологій. 
Об'єктом дослідження у даній роботі є агентно-орієнтована інформаційна 
система, спроєктована для використання нейронних мереж з метою ефективного 
вирішення конкретних завдань в умовах сучасного інформаційного потоку. 
Предметом дослідження є розробка, дослідження та впровадження 
агентно-орієнтованої інформаційної системи, заснованої на використанні 
нейронних мереж для обробки та аналізу даних. 
Метою даної магістерської роботи є розробка та дослідження агентно-
орієнтованої інформаційної системи, яка базується на використанні нейронних 
мереж для вирішення конкретних завдань. У процесі виконання дослідження 
буде розглянуто існуючі методи та засоби розв'язання схожих завдань, проведено 
теоретичні та експериментальні дослідження, а також впроваджено результати у 
практику проєктування програмного забезпечення інформаційних систем. 
Наукова новизна роботи полягає у розробці інтегрованого підходу до 
створення агентно-орієнтованих інформаційних систем з використанням 
нейронних мереж різної топології. 
 6 
ЧДТУ.232228.09 ПЗ 
Практичне значення отриманих результатів полягає у можливості 
використання розробленої системи у різних областях, де необхідне швидке та 
ефективне прийняття рішень на основі обробки великих обсягів інформації. 
Особистий внесок автора включає у себе розробку концепції агентно-
орієнтованої системи, вибір та адаптацію нейронних мереж, а також проведення 
експериментального тестування розробленого прототипу. 
Публікації: Участь в I Міжнародній науково-практичній конференція 
“SCIENCE AND SOCIETY: MODERN TRENDS IN A CHANGING WORLD”, 18-
20.12.2023 на тему: "Aгентно-орієнтована інформаційна система на основі 
генеративних нейронних мереж" (результати конференції у формі тез). 
Кваліфікаційна робота складається з вступу, чотирьох розділів, висновків, 
списку використаних джерел в кількості 11. Робота містить 31 рисунок та 2 
додатки. Загальний обсяг роботи викладено на 74 сторінках. 
  
 7 
ЧДТУ.232228.09 ПЗ 
РОЗДІЛ 1 ІСНУЮЧІ МЕТОДИ ТА ЗАСОБИ РОЗВ’ЯЗАННЯ 
ПОСТАВЛЕНИХ ЗАВДАНЬ 
1.1 Огляд існуючих методів та засобів 
У цьому підрозділі ми розглянемо конкретні методи та засоби, які 
використовуються для розробки агентно-орієнтованих систем на базі нейронних 
мереж. 
1.1.1 Мови програмування та бібліотеки для нейронних мереж 
Python є найпоширенішою мовою програмування для роботи з 
нейронними мережами завдяки багатству бібліотек, таких як TensorFlow, Keras, 
PyTorch, Theano тощо. 
TensorFlow є однією з найпоширеніших та потужних бібліотек для роботи 
з нейронними мережами. Він надає гнучкість у визначенні та тренуванні різних 
архітектур. 
PyTorch – інша популярна бібліотека для роботи з нейронними мережами, 
яка надає дуже гнучкий інтерфейс та велику швидкість навчання. 
Theano – це ще одна бібліотека для роботи з нейронними мережами. Вона 
була популярною, але зараз її розвиток припинено на користь TensorFlow та 
PyTorch 
Caffe спеціалізується на швидкості та ефективності, і в основному 
використовується для завдань у галузі комп'ютерного зору 
MXNet – ще одна бібліотека для глибинного навчання, яка надає широкий 
набір інструментів та підтримує гнучку розробку моделей. 
CNTK (Microsoft Cognitive Toolkit) розроблений Microsoft і надає 
ефективність у навчанні нейронних мереж на різних пристроях. 
1.1.2 Методи навчання агентів 
Навчання з підкріпленням (Reinforcement Learning) – це метод машинного 
навчання, де агент намагається вчитися приймати послідовні дії в середовищі 
 8 
ЧДТУ.232228.09 ПЗ 
так, щоб максимізувати деяку нагороду або очікуваний кумулятивний сигнал 
підкріплення [2]. 
Основні компоненти RL: 
– агент – сутність, яка вчиться взаємодіяти з середовищем. Вона приймає 
деякі дії та спостерігає стан середовища, а також отримує відгук у вигляді 
підкріплення; 
– середовище – контекст, в якому діє агент. Середовище повертає стани, 
до яких приєднані нагороди, відгуки на дії агента та відображення наступного 
стану після кожної дії; 
– стан – представлення поточного стану середовища. Стани надають 
агенту інформацію про те, де він знаходиться; 
– дія – дія, яку агент може виконати у поточному стані; 
– підкріплення – числовий сигнал, який агент отримує від середовища 
після кожної дії. 
Основна мета RL – навчити агента так вибирати дії в кожному стані, щоб 
максимізувати очікувану кумулятивну нагороду або навіть найбільш ймовірну 
стратегію. 
Навчання з підкріпленням застосовується в таких областях як гральна 
індустрія (наприклад, гри на відео консолях), робототехніка, управління 
ресурсами, фінанси та інші [2]. 
Навчання з учителем (Supervised Learning) – це один з основних підходів 
до машинного навчання, де модель навчається на основі вхідних даних та 
відповідних до них правильних відповідей (ярликів або міток). Суть навчання з 
учителем полягає в тому, щоб навчити модель встановлювати коректний 
відповідний з вхідних даних [3]. 
Основні компоненти навчання з учителем [3]: 
1 Вхідні дані (Input Data): Це набір прикладів, які складаються з ознак чи 
характеристик. Наприклад, якщо ми навчаємо модель розпізнавати зображення 
кота, то фотографії котів будуть входити до набору даних. 
2 Мітки (Labels): Це правильні відповіді, які відповідають вхідним даним. 
 9 
ЧДТУ.232228.09 ПЗ 
3 Модель (Model): Це алгоритм або структура, яка навчається визначати 
зв'язок між вхідними даними та їх відповідями. Модель може бути нейронною 
мережею, рішаючим деревом, лінійною регресією та іншими. 
4 Функція втрат (Loss Function): Це метрика, яка оцінює, наскільки добре 
модель передбачає відповіді на основі вхідних даних. Мета полягає в тому, щоб 
зменшити цю функцію, щоб модель наблизилася до правильних відповідей. 
5 Оптимізатор (Optimizer): Це алгоритм, який оновлює ваги моделі в 
процесі навчання, зменшуючи значення функції втрат. 
6 Навчальний процес (Training Process): Це етап, коли модель навчається 
на вхідних даних і їх відповідях. Модель багаторазово використовує цикли для 
уточнення своїх прогнозів. 
7 Валідація (Validation): Це процес оцінки продуктивності моделі на 
наборі даних, які не використовувалися під час навчання. Це допомагає виявити 
оверфітинг (перенавчання). 
8 Тестування (Testing): Це крок, коли модель оцінюється на тестовому 
наборі даних, який не використовувався ні в навчанні, ні в валідації. 
Принципи навчання з учителем використовуються в багатьох сферах, 
таких як класифікація, регресія, розпізнавання об'єктів у зображеннях, 
машинний переклад, та інші [3]. 
Навчання без учителя (Unsupervised Learning) – це підхід до машинного 
навчання, де модель намагається виявити структури та закономірності в наборі 
даних, не маючи правильних відповідей або міток [6]. 
Основні поняття та методи навчання без учителя: 
1 Кластеризація (Clustering): Мета – групувати подібні приклади разом в 
класи або кластери. Приклади в одному кластері схожі між собою, а приклади в 
різних кластерах відрізняються. 
2 Редукція розмірності (Dimensionality Reduction): Мета – зменшити 
кількість ознак, зберігаючи при цьому важливу інформацію. Наприклад, методи 
Principal Component Analysis (PCA) або t-distributed Stochastic Neighbor 
Embedding (t-SNE). 
 10 
ЧДТУ.232228.09 ПЗ 
3 Згорткові нейронні мережі (Autoencoders): Це нейронні мережі, які 
намагаються навчитися поданню даних у просторі меншої розмірності, а потім 
відновити початкові дані з цього простору. 
4 Генеративні моделі (Generative Models): Ці моделі намагаються 
навчитися розпізнавати та створювати нові приклади, які подібні до вхідних 
даних. Приклади включають Generative Adversarial Networks (GANs) та 
Variational Autoencoders (VAEs). 
5 Асоціативні правила (Association Rules): Це метод виявлення зв'язків 
між ознаками в даних, що вказує на те, які ознаки часто відбуваються разом. 
6 Аномалійне виявлення (Anomaly Detection): Мета – виявити незвичайні 
або аномальні приклади в наборі даних, які суттєво відрізняються від звичайних. 
7 Самоорганізуючі карти Кохонена (Self-Organizing Maps): Це нейронні 
мережі, які допомагають виявити структури в наборі даних, вирішуючи задачу 
відображення високо-розмірних даних в низькорозмірний простір. 
Навчання без учителя застосовується в тих ситуаціях, коли немає доступу 
до правильних відповідей або міток, але досліджуються структури та 
закономірності в даних, щоб виявити корисну інформацію. 
Навчання з підкріпленням з вчителем (Imitation Learning), також відоме як 
Supervised Imitation Learning, – це підхід до навчання агента в середовищі, де 
вчителем виступає експерт, який надає демонстрації правильних дій в цьому 
середовищі [4]. 
Процес навчання з підкріпленням з вчителем включає наступні етапи [4]: 
1 Збір даних: Експерт виконує дії в середовищі, і записуються пари (стан, 
дія), де стан – це поточний стан середовища, а дія – це дія, вибрана експертом. 
2 Створення набору даних: Пари (стан, дія), зібрані в кроку 1, створюють 
набір даних для навчання. 
3 Навчання моделі: Модель намагається навчитися передбачати дії на 
основі вхідних станів, використовуючи набір даних, що був зібраний. 
4 Оцінка моделі: Модель оцінюється на валідаційному наборі даних для 
того, щоб впевнитися, що вона вчиться ефективно і не перенавчається. 
 11 
ЧДТУ.232228.09 ПЗ 
5 Тестування моделі: Модель тестується на нових даних, щоб 
переконатися, що вона гарно справляється з вибором дій в невідомих ситуаціях. 
Цей метод корисний у випадках, коли у нас є доступ до експерта, який 
може надати демонстрації правильних дій в середовищі, але нам не обов'язково 
знаємо аналітичні правила чи функцію нагороди [4]. 
Проте, важливо пам'ятати, що модель може бути обмеженою даними, 
наданими експертом, і не завжди може навчатися адекватно реагувати на 
невідомі ситуації. 
1.1.3 Типи нейронних мереж 
Згорткові нейронні мережі (Convolutional Neural Networks або CNNs) – це 
тип нейронних мереж, особливо ефективний для обробки сітчастих даних, таких 
як зображення [5]. 
Основні характеристики згорткових нейронних мереж [5]: 
1 Згортки – основна операція в CNN. Згортка використовується для 
виявлення важливих особливостей в зображенні, таких як границі, кути, текстури 
тощо 
2 Пулінг допомагає зменшити розмірність зображення та скорочує 
обчислювальну складність, зберігаючи при цьому важливу інформацію. 
3 Активаційні функції є необхідною складовою нейронних мереж. Вони 
вводять нелінійність в модель, що дозволяє нейронам нейронної мережі 
вирішувати складні задачі, які лінійні моделі не можуть вирішити.  
4 Повні з'єднані шари (Fully Connected Layers) – шари, де кожен нейрон 
зв'язаний з кожним нейроном попереднього шару. Зазвичай використовуються 
для класифікації. 
5 Функція втрат (Loss Function) – використовується для оцінки того, 
наскільки добре модель вирішує поставлену задачу. 
6 Оптимізатор (Optimizer) – використовується для оновлення ваг моделі 
в процесі навчання з метою зменшення втрат. 
 12 
ЧДТУ.232228.09 ПЗ 
Згорткові нейронні мережі особливо ефективні для завдань обробки 
зображень, таких як класифікація об'єктів, виявлення об'єктів, сегментація 
зображень тощо. Вони дозволяють автоматично виявляти та використовувати 
важливі ознаки в даних, спрощуючи процес навчання. Також вони широко 
використовуються в сферах комп'ютерного зору, розпізнавання образів та 
обробки природних мов. 
Рекурентні нейронні мережі (Recurrent Neural Networks або RNNs) – це тип 
нейронних мереж, які можуть ефективно обробляти послідовності даних, де 
важливий контекст та залежність в часі [6]. 
Основні характеристики рекурентних нейронних мереж [6]: 
1 Зворотні зв'язки (Feedback Connections): RNNs мають зворотні зв'язки, 
що означає, що вони можуть передавати інформацію з попередніх кроків часу до 
поточного кроку. 
2 Внутрішні стани (Hidden States): RNNs зберігають внутрішні стани, які 
дозволяють моделі зберігати та оновлювати інформацію з попередніх кроків 
часу. 
3 Параметри, що діляться (Shared Parameters): Один і той же набір 
параметрів використовується на кожному кроці часу, що дозволяє моделі 
використовувати ту ж саму архітектуру для різних кроків. 
4 Один або багатошарові RNNs (Single-layer or Multi-layer RNNs): 
Мережа може мати один або більше рекурентних шарів для обробки складних 
залежностей. 
5 Варіанти RNN (LSTM, GRU): Існують спеціальні типи RNN, такі як 
Long Short-Term Memory (LSTM) та Gated Recurrent Unit (GRU), які дозволяють 
моделі краще керувати довготривалими залежностями. 
Рекурентні нейронні мережі широко використовуються в завданнях 
обробки природної мови (переклад, розпізнавання мови), аналізу часових рядів, 
генерації тексту, розпізнавання рукописного введення, тощо. Вони є потужним 
інструментом для роботи з послідовними даними та дозволяють моделям 
 13 
ЧДТУ.232228.09 ПЗ 
вирішувати завдання, які потребують урахування контексту та залежностей в 
часі [6]. 
Повністю з'єднані мережі (Fully Connected Networks), також відомі як 
нейронні мережі з повним зв'язком (Fully Connected Neural Networks або Multi-
Layer Perceptrons) – це конкретний тип нейронної мережі, в якому нейрони 
організовані у велику кількість шарів. У MLP кожен нейрон у попередньому шарі 
пов'язаний з кожним нейроном у наступному шарі. Це означає, що інформація 
може пройти через багато шарів (прихованих та вихідних) перед тим, як надати 
вихід [1]. 
У MLP кожен нейрон у прихованих шарах використовує функцію активації 
для перетворення вагового суму вхідних сигналів у вихідний сигнал. Потім цей 
вихід подається як вхід до наступного шару. У вихідному шарі також може 
застосовуватися функція активації, особливо в задачах класифікації [1]. 
Основні характеристики повністю з'єднаних мереж [1]: 
1 Кожен нейрон підключений до всіх нейронів попереднього та 
наступного шару: У кожному шарі кожен нейрон пов'язаний з кожним нейроном 
з попереднього та наступного шару. 
2 Функція активації: Кожен нейрон використовує активаційну функцію, 
яка надає нелінійність та необхідна для того, щоб модель могла вирішувати 
складні завдання. 
3 Багатошаровість (Multi-Layer): Повністю з'єднані мережі можуть мати 
багато шарів. У такому разі, вони називаються багатошаровими нейронними 
мережами. 
4 Зворотні зв'язки (Backpropagation): Для навчання таких мереж 
використовується алгоритм зворотнього поширення помилки. 
5 Функція втрат (Loss Function): Використовується для оцінки того, 
наскільки добре модель вирішує поставлену задачу. 
6 Оптимізатор (Optimizer): Використовується для оновлення ваг моделі в 
процесі навчання з метою зменшення втрат. 
 14 
ЧДТУ.232228.09 ПЗ 
Повністю з'єднані мережі використовуються в широкому спектрі завдань, 
таких як класифікація, регресія, генерація, розпізнавання образів тощо. Вони 
дозволяють нейронним мережам навчатися складним залежностям у даних і 
розв'язувати різноманітні завдання у різних областях. 
Генеративні нейронні мережі (ГНМ або GAN, від англ. Generative 
Adversarial Networks) – це клас штучних нейронних мереж, які використовуються 
для генерації нових зображень або даних, що дуже схожі на ті, що 
використовувалися для їхнього навчання [7]. 
Генеративні нейронні мережі складаються з двох основних компонентів: 
генератора та дискримінатора. 
Генератор: Ця частина мережі відповідає за створення нових прикладів 
даних. Вона приймає на вхід випадковий шум або інший вхідний сигнал і 
трансформує його у вихід, який повинен бути подібним до даних з навчального 
набору [7]. 
Дискримінатор, навпаки, використовується для відокремлення справжніх 
прикладів даних від згенерованих генератором. Він отримує на вхід як справжні, 
так і згенеровані дані та намагається визначити, які з них є справжніми [7]. 
Процес тренування ГНМ ґрунтується на конкурентному взаємодії 
генератора і дискримінатора. Генератор намагається підвищити якість своїх 
генерацій, тоді як дискримінатор намагається розрізнити між справжніми та 
згенерованими прикладами. Це призводить до неперервного покращення обох 
компонентів [7]. 
Генеративні нейронні мережі широко використовуються в галузях, таких 
як генерація зображень, узагальнення даних, створення стилізованих зображень 
та інші завдання, пов'язані з генерацією нових, реалістичних даних. 
1.2 Аналіз їхнього застосування в схожих дослідженнях 
У цьому підрозділі ми розглянемо застосування кожного з основних типів 
нейронних мереж в задачах апроксимації функцій. 
 15 
ЧДТУ.232228.09 ПЗ 
1.2.1 Аналіз застосування згорткових нейронних мереж 
Згорткові нейронні мережі (CNN) виявляються корисними для 
апроксимації функцій, особливо в тих випадках, коли дані мають просторову або 
геометричну структуру, наприклад, зображення. Ось деякі ключові аспекти 
застосування CNNs в дослідженнях апроксимації функцій [7]: 
– локальні шаблони та особливості: CNN спеціалізовані на виявленні 
локальних шаблонів та особливостей у вхідних даних. Це особливо корисно для 
аналізу зображень, де важливо впізнавати об'єкти, контури, текстури тощо [8]; 
– заглиблення признаків: Шари CNN дозволяють нейромережі 
автоматично вивчати складніші та абстрактні функції. Початкові шари можуть 
виявляти прості особливості, такі як кольори та текстури, а подальші шари 
можуть комбінувати ці особливості для виявлення більш складних ознак [8]; 
– спільне використання параметрів: Оскільки згорткові шари 
використовують однакові фільтри для різних частин вхідних даних, вони здатні 
ефективно використовувати та спільно навчати параметри, що може допомогти 
у виявленні загальних особливостей [8]; 
– інваріантність до зсувів і масштабування: CNN, завдяки 
використанню згорткових шарів, є відносно інваріантними до невеликих зсувів і 
масштабувань вхідних даних. Це дозволяє їм ефективно виявляти об'єкти 
незалежно від їхнього розташування та розміру на зображенні [8]; 
– пулінг: У CNN часто використовуються шари пулінгу, які допомагають 
зменшити розмірність даних, зберігаючи при цьому важливі ознаки. Це може 
поліпшити ефективність та швидкість навчання мережі [8]. 
Усі ці аспекти роблять CNN потужним інструментом для апроксимації 
функцій, особливо у випадках, коли досліджувані дані мають просторову або 
геометричну структуру. Однак важливо пам'ятати, що правильне налаштування 
гіперпараметрів, таких як архітектура мережі, кількість шарів, функції активації, 
є важливими кроками у досягненні успішних результатів. 
 16 
ЧДТУ.232228.09 ПЗ 
1.2.2 Аналіз застосування рекурентних нейронних мереж 
Рекурентні нейронні мережі (RNNs) є потужним інструментом для 
апроксимації функцій, які мають послідовний характер, наприклад, текст, часові 
ряди або звукові дані. RNNs мають здатність аналізувати та моделювати 
послідовні дані, де кожен елемент в послідовності може впливати на наступні. 
Вони можуть працювати з послідовностями різної довжини, оскільки не 
вимагають фіксованого розміру вхідних даних [9]. 
Однією з сильних сторін RNNs є їхня здатність до роботи з довгостроковою 
залежністю. Це дозволяє їм запам'ятовувати та використовувати інформацію з 
довгих послідовностей. 
Також важливо відзначити використання "прихованих станів" (hidden 
states), які представляють собою внутрішнє становище мережі та дозволяють їй 
запам'ятовувати попередній контекст та використовувати його для прийняття 
рішень. 
Однак у дуже глибоких RNNs може виникнути проблема зниклого або 
вибуваного градієнту, що може ускладнити навчання. Також може бути потрібна 
велика кількість даних для успішного навчання RNNs, особливо для складних 
завдань. Обчислювальна складність також може бути важливим фактором при 
використанні RNNs [9]. 
Загалом, RNNs є потужним інструментом для апроксимації функцій, які 
мають послідовний характер. Вони широко використовуються в багатьох 
областях, включаючи обробку природної мови, аналіз часових рядів, машинний 
переклад та інші задачі. 
1.2.3 Аналіз застосування багатошарових персептронів 
Багатошарові персептрони є класичним типом нейронних мереж, який 
використовується для апроксимації функцій в різних галузях науки та технологій 
[9]. 
Однією з головних переваг використання багатошарових персептронів є їх 
здатність апроксимувати широкий спектр складних функцій. Це робить їх 
 17 
ЧДТУ.232228.09 ПЗ 
універсальними інструментами для аналізу та моделювання різноманітних явищ 
[9]. 
Додатково, багатошарові персептрони відомі своєю простотою в реалізації 
та навчанні, що робить їх популярними серед дослідників та практиків. 
Важливим аспектом є те, що ці нейронні мережі можуть ефективно 
працювати з різними типами даних, включаючи числові та категоріальні, що 
розширює їхню придатність до різних задач [9]. 
Однак варто враховувати, що багатошарові персептрони можуть бути 
менш ефективними у вирішенні завдань, які вимагають розуміння 
послідовностей чи залежностей у часі. У таких випадках, рекурентні нейронні 
мережі можуть бути більш доцільним вибором. 
Загалом, багатошарові персептрони є важливим інструментом у сфері 
апроксимації функцій та дослідженнях у галузі штучного інтелекту та 
машинного навчання. 
1.2.4 Аналіз застосування генеративних нейронних мереж 
Генеративні нейронні мережі (ГНМ) призначені в першу чергу для 
генерації нових даних, але їх можна використовувати для задач апроксимації 
функцій залежно від конкретної конфігурації моделі та завдання. Тут 
розглянемо, як ГНМ можуть бути використані для апроксимації функцій [10]: 
1 Функціональна Апроксимація: Генератор може бути налаштований на 
відображення випадкового шуму або вхідних даних у вихід, який апроксимує 
певну функцію. Такий підхід може бути корисним для апроксимації функцій у 
випадках, коли традиційні методи апроксимації можуть бути важкими або 
непрактичними. 
2 Реконструкція Функцій: ГНМ можуть бути використані для 
реконструкції функцій або відновлення вихідних даних з пошкоджених або 
неповних вхідних даних. Це корисно в задачах, де необхідно відновити частину 
функції або апроксимувати функцію на основі обмежених або неповних даних. 
 18 
ЧДТУ.232228.09 ПЗ 
3 Апроксимація Розподілів: Варіаційні автокодери (одна з форм ГНМ) 
можуть бути використані для апроксимації розподілів даних, що може бути 
корисним у задачах генерації нових прикладів, що подібні до вхідних даних. 
4 Апроксимація Складних Функцій: ГНМ можуть бути використані для 
апроксимації складних функцій, які можуть містити нелінійні або нелінійні 
залежності. Це особливо корисно у випадках, коли інші методи апроксимації 
можуть виявитися недостатньо ефективними. 
5 Загальний Аналіз Залежності: ГНМ можуть допомагати аналізувати та 
моделювати залежності між вхідними та вихідними змінними в складних 
системах. 
Важливо враховувати, що ефективність використання ГНМ для 
апроксимації функцій може залежати від характеру даних, обсягу тренувального 
набору, конкретної архітектури мережі та інших факторів. Застосування ГНМ у 
визначенні функцій варіюється в залежності від конкретного випадку 
застосування та вимог задачі. 
  
 19 
ЧДТУ.232228.09 ПЗ 
Висновки до розділу 
У ході ретельного аналізу застосування різних типів нейронних мереж в 
різноманітних завданнях виникло багато цікавих спостережень. Згорткові 
мережі відмінно демонструють свою ефективність в обробці зображень, 
рекурентні мережі успішно вирішують задачі, пов'язані з послідовностями, а 
генеративні нейронні мережі виявляються винятковим інструментом для 
генерації нового контенту. 
Необхідно відзначити також важливу роль багатошарових персептронів, 
які, хоч і не входять в три основні типи, все ж зберігають свою актуальність в 
задачах класифікації та апроксимації функцій. Багатошаровий персептрон 
володіє здатністю навчання складних нелінійних залежностей та 
використовується у різних областях, де важлива точність передбачень та 
адаптація до змінних умов. 
Виявлено, що разом із значущими досягненнями при використанні 
нейронних мереж виникають виклики, такі як перенавчання та проблеми з 
обробкою обмежених обсягів даних. Такі аспекти підкреслюють важливість 
системного підходу до використання різних типів мереж, комбінування їхніх 
переваг та уникнення недоліків. 
  
 20 
ЧДТУ.232228.09 ПЗ 
РОЗДІЛ 2 ТЕОРЕТИЧНІ ТА ЕКСПЕРИМЕНТАЛЬНІ ДОСЛІДЖЕННЯ 
2.1 Теоретичні дослідження 
Багатошаровий персептрон (БШП) є однією з найпоширеніших архітектур 
нейронних мереж, використовуваних для вирішення завдань апроксимації 
функцій. Ця архітектура включає в себе введення, внутрішні (приховані) шари та 
вихідний шар. Кожен шар містить нейрони, які взаємодіють з нейронами 
попереднього та наступного шарів [11]. 
Нехай маємо багатошаровий персептрон з L шарами. Ваги між нейронами 
позначаються як ω��
���� де i – нейрон у попередньому шарі, j –  нейрон у наступному 
шарі, l – номер шару. Функція активації для нейронів у шарах може бути, 
наприклад, сигмоїдальною, гіперболічним тангенсом чи ReLU [11]. 
Операція, яку виконує кожен нейрон, можна виразити наступним чином: 
 
�� − 1
����
�� =  �� (∑�� �� �� − 1 ��
�� = 1 ���������� + ���� ) (2.1) 
 
де αl
j  – активація нейрона j у шарі l, σ  – функція активації, nl − 1 – кількість 
нейронів у попередньому шарі, blj зсув bias для нейрона j в шарі l. 
Мета задачі апроксимації функції полягає в тому, щоб навчити модель, у 
цьому випадку багатошаровий персептрон, відображати вхідні дані на вихідні 
значення таким чином, щоб вони були якнайточніше приближені до справжніх 
значень цієї функції. Зазвичай це означає мінімізацію помилки апроксимації або 
втрати між прогнозованими значеннями та фактичними значеннями [11]. 
Функція втрат (або функція помилки) визначає, наскільки великою є 
різниця між прогнозованими та фактичними значеннями. У випадку задачі 
регресії, де нам потрібно апроксимувати неперервну функцію, часто 
використовують середньоквадратичну помилку (MSE) [11]: 
 
1
MSE =  ∑N
i=1(yi  −  y )2î  (2.2) 
N
 21 
ЧДТУ.232228.09 ПЗ 
 
де N – кількість прикладів у навчальному наборі, yi  – фактичне значення, ŷi – 
прогнозоване значення для прикладу i. 
Також використовувати Mean Absolute Error (MAE) як функцію втрат для 
апроксимації функції. Вона вимірює середнє абсолютне значення різниці між 
прогнозованими та фактичними значеннями. Формула MAE виглядає наступним 
чином [11]: 
 
1
MAE =  ∑N
N i=1|yi − yî| (2.3) 
 
де N – кількість прикладів у навчальному наборі, yi  – фактичне значення, ŷi – 
прогнозоване значення для прикладу i. 
Зворотне поширення помилки є ключовим методом для навчання 
багатошарових персептронів. Цей метод використовується для обчислення 
градієнтів функції втрат відносно ваг і зсувів, і вони використовуються для 
оновлення параметрів мережі згідно із градієнтним спуском. 
Для покращення навчання та уникнення перенавчання можна 
використовувати різні техніки, такі як регуляризація, dropout, або використання 
оптимізаторів, наприклад, Adam чи RMSprop. 
Ефективність апроксимації функції також сильно залежить від архітектури 
багатошарового персептрону. Велика кількість шарів та нейронів може 
допомогти моделі виражати більше складних залежностей в даних, але також 
може призвести до перенавчання. 
Після навчання моделі важливо провести перевірку та тестування на 
незалежному від навчального набору даних для перевірки загальної здатності 
моделі узагальнювати на нові дані. 
 22 
ЧДТУ.232228.09 ПЗ 
2.2 Експериментальні дослідження 
Проаналізувавши найпопулярніші типи нейронних мереж було обрано 
багатошаровий персептрон для вирішення задачі апроксимації функції. Щоб 
визначити найкращу конфігурацію даної нейронної мережі для вирішення нашої 
задачі проведемо тренування моделі з різними функціями активації та 
оптимізації та визначимо найкращі з них. 
Найбільш підходять функції активації: linear, relu, tahn та sigmoid. 
Серед функцій оптимізації можна виділити наступні: adam, rmsprop, sgd та 
adagrad. 
Функції втрат: mean_squared_error або mean_absolute_error 
Створимо тестовий багатошаровий персептрон: 
import matplotlib.pyplot as plt 
import numpy as np 
import tensorflow as tf 
# Генерація даних для апроксимації 
np.random.seed(0) 
X = np.sort(5 * np.random.rand(200, 1), axis=0) 
y = np.sin(X).ravel() 
# Створення моделі 
model = tf.keras.models.Sequential() 
model.add(tf.keras.layers.Dense(10, input_dim=1, 
activation="relu")) 
model.add(tf.keras.layers.Dense(1, activation="linear")) 
# Компіляція моделі 
model.compile(loss="mean_squared_error", optimizer="sgd") 
# Навчання моделі 
model.fit(X, y, epochs=1000, batch_size=20, verbose=0) 
# Передбачення для виведення графіку 
X_test = np.arange(0.0, 5.0, 0.01)[:, np.newaxis] 
y_pred = model.predict(X_test) 
# Графік результатів 
plt.scatter(X, y, color="black", label="Дані") 
plt.plot(X_test, y_pred, color="blue", linewidth=3, 
label="Апроксимація") 
plt.title("Багатошаровий персептрон для апроксимації функції") 
plt.legend() 
plt.show() 
 
Дана нейронна мережа складається з двох шарів, один з яких завжди буде 
отримувати функцію активації linear це потрібно для більш точного навчання 
мережі.  
 23 
ЧДТУ.232228.09 ПЗ 
Експеримент №1 
Функція активації: linear 
Функція оптимізації: adam 
Функція втрат: mean_squared_error 
 
 
Рисунок 2.1 – Результати експерименту №1 
 
Експеримент №2 
Функція активації: relu 
Функція оптимізації: adam 
Функція втрат: mean_squared_error 
 
 
Рисунок 2.2 – Результати експерименту №2 
 24 
ЧДТУ.232228.09 ПЗ 
Експеримент №3 
Функція активації: sigmoid 
Функція оптимізації: adam 
Функція втрат: mean_squared_error 
 
 
Рисунок 2.3 – Результати експерименту №3 
 
Експеримент №4 
Функція активації: sigmoid 
Функція оптимізації: rmsprop 
Функція втрат: mean_squared_error 
 
 
Рисунок 2.4 – Результати експерименту №4  
 25 
ЧДТУ.232228.09 ПЗ 
Експеримент №5 
Функція активації: sigmoid 
Функція оптимізації: sgd 
Функція втрат: mean_squared_error 
 
 
Рисунок 2.5 – Результати експерименту №5 
 
Експеримент №6 
Функція активації: sigmoid 
Функція оптимізації: adagrad 
Функція втрат: mean_squared_error 
 
 
Рисунок 2.6 – Результати експерименту №6 
 26 
ЧДТУ.232228.09 ПЗ 
 
Експеримент №7 
Функція активації: sigmoid 
Функція оптимізації: adam 
Функція втрат: mean_absolute_error 
 
 
Рисунок 2.7 – Результати експерименту №7 
 
Провівши сім експериментів та порівнявши їх результати, можна дійти 
висновку що найкращою конфігурацією нейронної мережі для вирішення задачі 
апроксимації функції є наступна конфігурація: 
– функція активації: sigmoid; 
– функція оптимізації: adam; 
– функція втрат: mean_absolute_error. 
На основі даних експериментів та визначеної конфігурації буде створено 
сервіс який дозволить тренувати та зберігати моделі, а також виконувати 
передбачення (апроксимацію).  
 27 
ЧДТУ.232228.09 ПЗ 
Висновки до розділу 
Результати нашого дослідження виявилися показовими щодо ефективності 
багатошарових персептронів як ключового інструменту для вирішення задачі 
апроксимації функцій. Наші експериментальні дослідження охопили 
різноманітні конфігурації багатошарових персептронів, зокрема різні кількості 
шарів, розміри шарів та функції активації. 
Однією з ключових знахідок стало те, що оптимальна конфігурація 
багатошарового персептрону суттєво залежить від конкретної природи задачі 
апроксимації функції. Виявлено, що у деяких випадках глибокі та широкі мережі 
можуть забезпечити кращу апроксимаційну здатність, тоді як у інших ситуаціях 
більш прості топології можуть виявитися оптимальними. 
Також було визначено, що вибір функції активації та методу оптимізації 
грає важливу роль у здатності багатошарового персептрону навчатися та 
апроксимувати складні функції. Наприклад, функції активації, такі як ReLU або 
Sigmoid, можуть впливати на швидкість навчання та уникнення проблем 
перенавчання. 
Слід зазначити, що результати досліджень підтверджують актуальність 
багатошарових персептронів в сучасних задачах апроксимації функцій. Вони 
володіють гнучкістю та адаптивністю, що дозволяє їм ефективно моделювати 
різноманітні функціональні залежності. Підсумовуючи, впровадження 
багатошарових персептронів становить важливий крок у напрямку розв'язання 
складних завдань апроксимації функцій, а подальші дослідження можуть 
спрямуватися на оптимізацію їхніх параметрів для конкретних завдань та 
вдосконалення їхньої загальної продуктивності. 
  
 28 
ЧДТУ.232228.09 ПЗ 
РОЗДІЛ 3 ВПРОВАДЖЕННЯ РЕЗУДЬТАТІВ ДОСЛІДЖЕНЬ У 
ПРАКТИКУ ПРОЕКТУВАННЯ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ 
3.1 Моделювання предметної області 
Ключовим етапом розробки системи є відтворення предметної області, що 
означає створення спрощеної абстракції з метою вивчення та розуміння всієї 
системи. Цей процес включає створення моделей, які відображають основні 
аспекти, властивості та взаємозв'язки в реальній системі. Моделі можуть 
приймати різні форми, такі як математичні, комп'ютерні, фізичні, вербальні та 
інші. 
3.1.1 Модель предметної області. Словник предметної області 
На даному етапі необхідно створити візуальну модель, яка сприятиме 
зручному сприйняттю створюваної системи та допоможе вирішити складні 
завдання у процесі її конструювання. За допомогою моделі предметної області 
можна виявити та аналізувати різноманітні аспекти реалізації системи, які, на 
перший погляд, можуть здатися простими. На рис. 3.1 зображено узагальнену 
діаграму класів системи. 
На діаграмі зображено основні класи системи, а саме: 
– Server 
– Main Handler 
– Jobs Queue Listener 
– Model Training 
– Model Predicting 
– Finished Jobs Queue 
Словник предметної області – це терміни та поняття, які найчастіше 
зазначаються під час проведення аналізу та проектування. До словника 
предметної області можна віднести: інформаційна система, нейронна мережа, 
багатошаровий персептрон, апроксимація, модель, навчання. 
 29 
ЧДТУ.232228.09 ПЗ 
 
Рисунок 3.1 – Загальна діаграма класів агентно–орієнтованої 
інформаційної системи на основі нейронних мереж 
 
3.1.2 Елементи моделювання предметної області 
Під час проектування предметної області та і всієї системи загалом в даній 
роботі було використано мову UML. Основні елементи моделювання, що будуть 
використовуватися для побудови UML діаграм в наступних пунктах, наведено в 
таблиці 3.1 та таблиці 3.2. 
Таблиця 3.1 
Графічний символ Назва елемента 
дійова особа (актор) 
 
варіант використання 
 
 
пакет 
 
клас 
 
  
 30 
ЧДТУ.232228.09 ПЗ 
Продовження таблиці 3.1 
компонент 
 
вузол 
 
компонент 
 
стан 
 
лінія життя, фокус управління 
 
початковий і кінцевий стан 
 
логічний зʼєднувач, розгалуджувач 
 
паралельний зʼєднувач, розгалуджувач 
 
 
Таблиця 3.2 
Графічний символ Назва елемента 
відношення асоціації 
 
відношення залежності 
 
заміна 
 
межа 
 
простий потік управління 
 
 31 
ЧДТУ.232228.09 ПЗ 
виклик 
 
  
 32 
ЧДТУ.232228.09 ПЗ 
Продовження таблиці 3.2 
рекурсія 
 
повернути 
 
агрегація 
 
 
3.1.3 Робоча область моделювання 
Після детального аналізу інформаційної моделі, були виявлені основні 
потоки інформації: 
1 Запуск сервера. 
2 Прослуховування черги задач для тренування моделі. 
3 Обробка вхідних даних. Ініціалізація, компіляція та тренування моделі. 
4 Збереження моделі – збереження моделі у вихідний файл. 
5 Додавання задачі до черги виконаних задач. 
Схема інформаційних потоків представлена схемою на рисунку 3.2. 
 
 
Рисунок 3.2 – Інформаційні потоки 
 33 
ЧДТУ.232228.09 ПЗ 
  
 34 
ЧДТУ.232228.09 ПЗ 
3.2 Формування та аналіз вимог 
Аналіз вимог – це процес визначення потреб і умов, які ставляться до 
нового або зміненого продукту, з урахуванням можливих конфліктів між різними 
замовниками, такими як користувачі. 
Вимоги для інформаційних систем – це набір вимог щодо характеристик, 
якості та функцій системи, яку розробляють або вже розробили. Вони 
представляють собою узагальнене відображення потреб зацікавлених сторін у 
створенні системи: замовників, користувачів і розробників. Цей етап надає 
розробнику впевненість у тому, що всі потреби користувача розуміються перед 
початком їх втілення. 
3.2.1 Первинні вимоги замовника 
Первинні вимоги фіксують бажання і потреби замовника і відображаються 
у формі діаграм прецедентів (варіантів використання, UseCase). Перед 
побудовою діаграми вони описуються такою мовою, яку замовник зможе 
зрозуміти. 
Проведення аналізу вимог спрямоване на визначення консистентності, 
повноти та реалістичності визначених критеріїв. У випадку виявлення 
суперечностей чи непорозумінь вимоги коригуються за допомогою взаємодії з 
замовником. Після аналізу та внесених правок вимоги підтверджуються. 
Затверджені вимоги виступають основою для подальшої розробки системи або 
програмного забезпечення, функціонуючи як контракт між командою 
розробників та замовником. 
Первинні вимоги замовника до системи: 
Агент (нода) повинен прослуховувати чергу задач на виконання і в разі 
створення задачі запускати процес тренування моделі. Після тренування 
зберегти модель у вихідний файл та створити відповідну задачу в черзі 
виконаних задач. 
 35 
ЧДТУ.232228.09 ПЗ 
3.2.2 Детальні вимоги розробника 
Детальні вимоги фіксуються за допомогою структурованої мови та 
відображаються за допомогою діаграм діяльності та діаграм взаємодій. Вони 
розгортають первинні вимоги докладніше. 
Для розробки модуля агентно-орієнтованої системи на основі нейронних 
мереж виділено наступні вимоги: 
1 Можливість тренування моделі. 
2 Можливість збереження моделі. 
3 Можливість налаштування конфігурації моделі. 
4 Можливість отримання списку тренованих моделей. 
5 Можливість отримання передбачення на основі тренованої моделі. 
3.2.3 Функціональні вимоги 
Функціональні вимоги визначають, як система повинна себе вести і які 
сервіси (функції) вона має виконувати. Це вимоги, що зʼявляються після 
ретельного аналізу проблемної (предметної) області. У процесі їх формулювання 
розглядаються різноманітні варіанти поведінки системи, що обумовлені різними 
даними та станами зовнішнього середовища. 
Функціональні вимоги до даної системи: 
1 Робота з чергами. 
2 Тренування моделі. 
3 Збережуння моделі. 
4 Конфігурація моделі. 
5 Отримання списку тренованих моделей. 
6 Прогнозування за допомогою натренованої моделі. 
3.2.4 Нефункціональні вимоги 
Нефункціональні вимоги визначають характеристики системи та її 
зовнішнього оточення, критерії ефективності і безпеки. Вони також можуть 
 36 
ЧДТУ.232228.09 ПЗ 
включати обмеження, які обмежують дії та функції системи, а також умови її 
розробки. 
Нефункціональні вимоги для даної системи: 
1 Вся система повинна бути розділена на різні підсистеми: UI, Core та 
агенти (частина яка розробляється в даній роботі). 
2 Агенти повинні мати можливість комунікувати з Core. 
3 Незалежність від інших сервісів. 
4 Масштабованість. 
5 Простота використання 
3.3 Формування та аналіз вимог за допомогою діаграми прецедентів 
Діаграма прецедентів – це графічний інструмент, що дозволяє 
структурувати та відобразити взаємодію між користувачами (акторами) та 
системою через визначення конкретних сценаріїв взаємодії, відомих як 
прецеденти. Кожен прецедент представляє собою конкретну функціональну 
вимогу замовника. 
На діаграмі прецедентів актори та прецеденти взаємодіють у вигляді 
графічних об'єктів. Актори – це ролі чи сутності, які взаємодіють із системою, 
тоді як прецеденти визначають конкретні дії чи функції, які система виконує для 
задоволення потреб акторів. Зв'язки між акторами і прецедентами вказують на 
конкретні сценарії взаємодії. 
Така діаграма допомагає розібрати, як система буде використовуватися 
кінцевими користувачами та іншими акторами, і відображає сценарії, що 
виникають при їх взаємодії з системою. Вона дозволяє зрозуміти потреби та 
очікування користувачів, що є ключовим етапом у розробці системи. 
На основі вимог було побудовано діаграму прецедентів (рис. 3.3), яка 
дозволить отримати відмінне візуальне уявлення про вимоги користувачів. 
 
 37 
ЧДТУ.232228.09 ПЗ 
 
Рисунок 3.3 – Діаграма прецедентів агентно-орієнтованої інформаційної 
системи на основі нейронних мереж 
  
 38 
ЧДТУ.232228.09 ПЗ 
3.4. Проєктування логічної структури системи 
Розробка логічної структури системи включає в себе створення моделі 
класів і пакетів, яка визначає, з яких компонентів складається система. Цей 
процес також відомий як детальне проєктування класів. 
Детальне проєктування описує, як організовані дані та алгоритми 
всередині окремих класів. 
У галузі програмування та комп'ютерних наук термін "структури даних" 
вказує на методи організації даних в комп'ютерах. Зазвичай це також включає 
перелік операцій, які можна виконати над цими даними. 
Вибір правильних структур даних має величезне значення для ефективного 
виконання відповідних алгоритмів обробки. Правильно побудовані структури 
даних дозволяють оптимізувати використання машинного часу та пам'яті 
комп'ютера для виконання найважливіших операцій. 
3.4.1 Діаграма класів 
Діаграма класів є статичним відображенням структури моделі. На ній 
відображаються статичні (декларативні) компоненти, такі як класи, типи даних, 
їх характеристики та взаємозв'язки. Крім того, вона може містити позначення для 
пакетів та вкладених пакетів. Іноді на діаграмі класів можуть бути показані 
елементи поведінки, проте їх динаміка розглядається на інших типах діаграм. 
Ця діаграма використовується для відображення статичної структури 
моделі системи в термінології класів об'єктно-орієнтованого програмування. На 
ній показуються класи, інтерфейси, об'єкти, співробітництва та їх взаємозв'язки. 
Логічна структура агентно-орієнтованої інформаційної системи на основі 
нейронних мереж представлена за допомогою UML-діаграми класів (рис. 3.4), 
яка служить для відображення статичної структури моделі системи в 
термінології класів. 
 39 
ЧДТУ.232228.09 ПЗ 
 
Рисунок 3.4 – Діаграма класів агентно-орієнтованої інформаційної 
системи на основі нейронних мереж 
 
3.4.2 Діаграма пакетів 
Діаграми пакетів в рамках уніфікованої мови моделювання (UML) 
демонструють взаємозв'язки між пакетами, які утворюють модель. 
Пакет – це компонент моделі, який використовується для групування 
інших елементів моделі. Елементи моделі, які входять до певного пакету, 
називаються його членами. Пакет має усіх своїх членів у власності, що означає, 
що вони належать йому. При видаленні пакету з моделі, усі його члени, які 
перебувають у його власності, також видаляються. 
Діаграма пакетів включає в себе пакети класів та показує залежності між 
ними. Вона надає опис архітектурної основи системи та допомагає у керуванні 
масштабами та складністю системи. 
Діаграму пакетів агентно-орієнтованої інформаційної системи на основі 
нейронних мереж зображено на рисунку 3.5 
 40 
ЧДТУ.232228.09 ПЗ 
 
Рисунок 3.5 – Діаграма пакетів агентно-орієнтованої інформаційної 
системи на основі нейронних мереж 
 
3.5 Архітектурне проєктування 
Головна мета логічного відображення – розгляд структурних та 
функціональних відношень між елементами моделі системи. Проте для реалізації 
конкретної фізичної системи необхідно конвертувати елементи логічного 
відображення у матеріальні об'єкти. Для цього використовується інший аспект 
модельного представлення – фізичне відображення. 
Створення архітектури – це проєктування на вищому рівні. Логічна 
архітектура описує систему в термінах її принципової організації, представленої 
у вигляді пакетів, програмних класів і підсистем. Вона є логічною, оскільки не 
 41 
ЧДТУ.232228.09 ПЗ 
визначає, як саме ці елементи будуть розгорнуті у різних операційних системах 
чи на фізичних комп'ютерах в мережі (це відноситься до архітектури 
розгортання). 
Етап архітектурного проєктування інформаційної системи повинен бути 
представлений описом процесу об'єктно-орієнтованої декомпозиції системи до 
рівня підсистем та їх взаємозв'язків, а також описом логічної структури у вигляді 
компонентів (діаграма компонентів). 
3.5.1 Діаграма компонентів 
Ще одним важливим елементом для формування фізичної архітектури 
системи є компонент програмного забезпечення. Діаграма компонентів 
відображає визначення, внутрішню структуру та взаємозв'язки між 
компонентами. У цьому контексті фізичні компоненти можуть бути представлені 
файлами, базами даних, бібліотеками, модулями, пакетами, інтерфейсами тощо. 
Компонент – це частина моделі, що включає модульну частину системи з 
внутрішнім вмістом. У мові UML, компонент може бути будь-яким автономним 
елементом системи чи підсистеми. Компонент може мати два види інтерфейсів: 
надані та необхідні. Надані інтерфейси – це ті, які компонент пропонує для 
взаємодії. Необхідні інтерфейси – ті, які компоненту потрібні для виконання 
своєї функціональності. 
Внутрішня структура компонентів залишається прихованою і 
недоступною ззовні, за винятком тих, які надаються через їхні інтерфейси. 
Компоненти можуть взаємодіяти між собою за допомогою відношень, 
спроєктованих так, щоб утримувати компонент якнайбільш незалежним від 
свого оточення. 
Діаграма компонентів, відмінно від раніше описаних діаграм, розглядає 
особливості фізичного відображення системи та дозволяє встановити 
архітектурні зв'язки між програмними компонентами. Діаграму компонентів 
агентно-орієнтованої інформаційної системи на основі нейронних мереж 
зображено на рисунку 3.6. 
 42 
ЧДТУ.232228.09 ПЗ 
 
 
Рисунок 3.6 – Діаграма компонентів системи 
 
У даному прикладі компонент Data Handling Server підготовлює дані та 
створює задачу на тренування моделі. Компонент Jobs Queue слухає чергу задач 
і як тільки буде додана задача він комунікує з одним із двох компонентів: Train 
Model або Model Predictions. Після тренування чи прогнозування дані 
передаються компоненту Save Data та зберігаються. Після збереження даних 
компонент Save Data комунікує з компонентом Finished Jobs Queue, який 
створює відповідну задачу в черзі виконаних задач. 
3.5.2 Розгортання програмної системи на апаратних засобах. Діаграма 
розгорттання 
Діаграма розгортання в UML відображає обчислювальні вузли, 
компоненти та об'єкти, що функціонують на цих вузлах під час виконання 
програми. Компоненти представляють робочі екземпляри коду, і лише ті з них 
відображаються, які активні під час роботи програми. Ті, що не взаємодіють, 
можна відобразити на діаграмах компонент. Діаграма розгортання вказує на 
розташування робочих екземплярів компонентів, тоді як діаграма компонент 
показує зв'язки між типами компонент. 
Вона служить для відображення "фізичної" структури програмної системи 
та використовується на етапі проєктування як основа для реалізації системи. 
 43 
ЧДТУ.232228.09 ПЗ 
Діаграма розгортання містить артефакти, вузли та їх відносини, які вказують на 
розміщення програмних елементів у фізичній архітектурі системи і їх взаємодію, 
зазвичай через мережу. Це дозволяє краще зрозуміти фізичну архітектуру або 
архітектуру розгортання. 
Для функціонування системи необхідна система Windows, Linux або Mac 
OS із встановленим і налаштованим Docker. 
Docker дозволить нам запустити сервер в ізольованому середовищі, а 
також встановить всі необхідні бібліотеки та коректну версію Python. 
Діаграма розгортання серверу зображена на рисунку 3.7 
 
 
Рисунок 3.7 – Діаграма розгортання серверу 
 
3.6 Моделювання поведінки системи 
Модель поведінки (behavior model) представляє собою виклад алгоритму 
функціонування системи. В рамках UML існує кілька різних інструментів для 
висвітлення поведінки, і вибір конкретного інструменту залежить від типу 
поведінки, який необхідно описати. 
 44 
ЧДТУ.232228.09 ПЗ 
3.6.1 Діаграма діяльності 
Діаграма діяльності в UML представляє собою візуальне зображення графу 
діяльностей, який є варіантом графу станів скінченного автомату. Вершини 
графа діяльностей відображають конкретні дії, а переходи відбуваються після 
завершення виконання дій. 
Дія виступає як основна одиниця визначення поведінки в специфікації. Дія 
приймає вхідні сигнали і перетворює їх на вихідні. Обидві множини можуть бути 
порожніми. Виконання дії відбувається окремо від інших. Також, виконання 
діяльності означає виконання всіх дій, що входять в цю діяльність. Кожна дія в 
діяльності може повторюватись декілька разів під час виконання діяльності. Дії, 
як мінімум, мають отримувати, перетворювати та тестувати дані, а деякі можуть 
вимагати конкретної послідовності. 
Специфікація діяльності на вищих рівнях може дозволяти виконання 
кількох (логічних) потоків та містити механізми синхронізації для гарантування 
правильного порядку виконання дій. 
На рисунку 3.8 зображена діаграма діяльності інформаційної системи на 
основі нейромереж. 
 
 
Рисунок 3.8 – Діаграма діяльності 
 45 
ЧДТУ.232228.09 ПЗ 
3.6.2 Діаграма послідовності 
На основі зібраних даних та для докладнішого моделювання була створена 
діаграма послідовностей для процесу виявлення кібератак. У цій діаграмі 
відображено лише ті об'єкти, які безпосередньо взаємодіють у процесі 
виявлення. Ключовим моментом для діаграми послідовності є динаміка взаємодії 
об'єктів у часі. 
Діаграма послідовності інформаційної системи зображена на рисунку 3.9. 
 
 
Рисунок 3.9 – Діаграма послідовності 
 
3.6.3 Діаграма комунікації 
Діаграма взаємодії є однією з моделей опису поведінки взаємодіючих груп 
об'єктів в UML. Зазвичай кожна окрема діаграма взаємодії висвітлює поведінку 
лише в межах конкретного сценарію використання. На цій діаграмі звичайно 
представлені екземпляри об'єктів та повідомлення, якими ці об'єкти 
обмінюються між собою у контексті вказаного сценарію використання. 
Діаграми взаємодії можуть мати різні графічні форми, проте найбільш 
важливими є діаграми послідовності та діаграми комунікації. Діаграма 
комунікації для цього випадку зображена на рисунку 3.10. 
 46 
ЧДТУ.232228.09 ПЗ 
 
Рисунок 3.10 – Діаграма комунікації 
 
3.6.4 Діаграма скінченного автомату 
Діаграма станів – це орієнтований граф, де вершини відповідають станам 
автомата, а дуги представляють вхідні сигнали. Кожна дуга, позначена символом 
xi, вказує на перехід зі стану aj в стан ak при отриманні вхідного сигналу xi. 
Такий граф визначає функцію переходів автомата, а для визначення функції 
виходів дуги позначаються відповідними вихідними сигналами. 
Діаграми станів Хареля, що стали частиною UML, набувають 
популярності. Вони дозволяють моделювати надстани, ортогональні регіони та 
діяльність як складову стану. Класичні діаграми станів можуть вимагати 
створення багатьох вершин для кожної можливої комбінації параметрів, що 
визначає стан, але діаграми Хареля спрощують цей процес. 
Діаграма станів UML для агентно-орієнтованої інформаційної системи на 
основі нейронних мереж представлена на рисунку 3.11. 
 
 
Рисунок 3.11 – Діаграма скінченного автомату 
 47 
ЧДТУ.232228.09 ПЗ 
  
 48 
ЧДТУ.232228.09 ПЗ 
Висновки до розділу 
Проведений процес моделювання системи виявився детальним та 
систематичним, а кожен етап ілюстровано відповідними діаграмами, 
відображаючи всі аспекти визначених вимог. Описана послідовність дій у 
проєктованому об'єкті становить чітку та логічну картину, яка веде до 
конкретних результатів. Під час моделювання предметної області були докладно 
вивчені вимоги до програмного забезпечення, що надали важливий фундамент 
для подальших етапів розробки. 
Особлива увага була приділена проєктуванню логічної структури та 
архітектурному проєктуванню, що сприяло створенню системи з оптимальною 
організацією та високою ефективністю. Отримані діаграми не лише 
відображають внутрішню логіку системи, але й дозволяють чітко зрозуміти її 
функціональність та реакцію на різні умови. 
У результаті моделювання вдалося створити концептуальну картину 
системи, що є необхідною основою для подальшої розробки програмного 
забезпечення. Цей процес дозволив не лише отримати глибоке розуміння 
внутрішньої структури системи, але й визначити та вирішити потенційні 
труднощі та виклики, що можуть виникнути під час реалізації проєкту. 
  
 49 
ЧДТУ.232228.09 ПЗ 
РОЗДІЛ 4 РОЗРОБКА І ТЕСТУВАННЯ ПРОГРАМНОГО 
ЗАБЕЗПЕЧЕННЯ 
4.1 Розробка програмного комплексу 
Людино-машинна взаємодія – це концепція, що охоплює інженерні 
рішення, спрямовані на забезпечення взаємодії між оператором та керованими 
ним машинами. Проєктування інтерфейсу людино-машини включає створення 
робочого середовища, такого як крісла, столи, або пульт управління, 
розташування приладів і органів керування, налаштування освітлення робочого 
місця, а також, можливо, регулювання мікроклімату. 
Детальним аспектом є аналіз дій оператора з органами управління, їх 
доступність та необхідні зусилля для використання, узгодженість дій, що 
керують, і "захист від дурня" – уникнення неправильних або небажаних дій. 
Також розглядається розташування дисплеїв та розміри текстів на них. 
У промислових умовах інтерфейс людина-машину часто реалізується з 
використанням стандартних засобів, таких як операторські панелі, комп'ютери і 
загальноприйняте програмне забезпечення. Основною метою людино-машинної 
взаємодії є спрощення роботи оператора через інтуїтивно зрозуміле 
відображення на екрані комп'ютера інформації про роботу обладнання. 
4.1.1 Обґрунтування вибору засобів реалізації 
Визначення програмних та апаратних засобів для вирішення конкретної 
задачі здійснюється на основі постановки завдання та структури та алгоритму 
функціонування розроблюваного об'єкту. 
Дана система передбачає розробку веб-сервера та нейронної мережі.  
Для реалізації даної системи було обрано мову програмування Python, яка 
з легкістю дозволяє розроблювати як веб сервери так і нейронні мережі. 
Серверна частина реалізована за допомогою бібліотеки FastAPI, яка 
дозволяє з легкістю створювати REST API. 
 50 
ЧДТУ.232228.09 ПЗ 
Частина для тренування та прогнозування реалізована з використанням 
нейронних мереж. Для розробки нейронної мережі було обрано бібліотеку 
Tensorflow від компанії Google, яка дозволяє з легкістю створювати різні типи 
нейронних мереж та має досить гнучкі налаштування. Загалом обраний стек 
технологій якнайкраще підходить для вирішення поставлених задач. 
В якості текстового редактора для написання коду було обрано Visual 
Studio Code адже він є безкоштовним, гнучким в налаштуванні та зручним в 
користуванні. 
Visual Studio Code, який також зазвичай називають VS Code — це редактор 
початкового коду, створений Microsoft із Electron Framework для Windows, Linux 
і macOS. Функції включають підтримку налагодження, підсвічування 
синтаксису, інтелектуальне завершення коду, фрагменти,  
комбінації клавіш, параметри та встановлювати розширення, які додають 
функціональність. 
TensorFlow — відкрита програмна бібліотека для машинного навчання 
цілій низці задач, розроблена компанією Google для задоволення її потреб у 
системах, здатних будувати та тренувати нейронні мережі для виявляння та 
розшифровування образів та кореляцій, аналогічно до навчання й розуміння, які 
застосовують люди. Її наразі застосовують як для досліджень, так і для розробки 
продуктів Google, часто замінюючи на його ролі її закритого попередника, 
DistBelief. TensorFlow було початково розроблено командою Google Brain для 
внутрішнього використання в Google, поки її не було випущено під відкритою 
ліцензією Apache 2.0 9 листопада 2015 року 
FastAPI – це сучасний, швидкий (з високою продуктивністю) веб-
фреймворк для створення API з використанням Python. 
4.1.2 Опис структурної (функціональної) схеми 
З метою вирішення поставленого завдання була створена структурна схема 
інформаційної системи, що включає всі необхідні модулі для забезпечення всіх 
необхідних функцій та ефективної роботи системи в цілому.  
 51 
ЧДТУ.232228.09 ПЗ 
Загальна структурна схема системи пердставлена на рисунку 4.1. 
 
Рисунок 4.1 – Структурна схема (загальна) 
 
Структурна схема розроблюваної системи передставлена на рисунку 4.2. 
 
 
Рисунок 4.2 – Структурна схема (агент) 
 
Як можемо бачити на схемі вище наша система складається з чотирьох 
підсистем: 
– Підсистема моніторингу черги здійснює моніторинг черги задач і в разі 
створення нової задачі запускає підсистему тренування. 
– Підсистема тренування являє собою неронну мережу яка на основі 
вхідних даних та конфігурації мережі проводить тренування моделі. 
– Підсистема збереження даних – зберігає натреновану в модель в файл 
для подальшого використання моделі в задачах прогнозування. 
 52 
ЧДТУ.232228.09 ПЗ 
– Підсистема запису в чергу відповідає за створення відповідної задачі в 
черзі виконаних задач після завершення тренування/прогнозування. 
4.1.3 Опис логічної схеми системи 
Так як розроблювана система є частиною іншої більш глобальної системи, 
було побудовано загальну логічну схему для розуміння логіки роботи системи 
вцілому (див. рис. 4.3). 
 
 
Рисунок 4.3 – Логічна схема (загальна) 
 53 
ЧДТУ.232228.09 ПЗ 
Для того щоб продемонструвати роботу агентно-орієнтованої 
інформаційної системи на основі нейронних мереж було побудовано логічну 
схему роботи програми, що зображена на рисунку 4.4. 
 
 
Рисунок 4.4 – Логічна схема роботи серверу 
 54 
ЧДТУ.232228.09 ПЗ 
  
 55 
ЧДТУ.232228.09 ПЗ 
4.1.4 Розробка бази даних 
В даній роботі база даних не використовується адже обробкою і 
зберіганням даних в базі даних займається інший сервіс, який розроблено в 
рамках іншої дипломної роботи. Все що нам потрібно це просто зберігати файли 
моделей на диску та мати до них доступ.  
4.1.5 Розробка інтерфейсу користувача 
Даний програмний продукт являє собою сервер, який є частиною більшої 
системи і має досить простий інтерфейс. 
Після запуску серверу в консолі можна побачити інформацію про те що в 
даний момент часу відбувається на сервері (див. рис. 4.5). 
 
 
Рисунок 4.5 – Інформація а консолі серверу після запуску та отримання 
задачі на тренування моделі 
 
Також для даного серверу налаштовано модуль Swagger, який дозволяє 
переглянути список наявних ендпоінтів, дані які необхідно передавати для 
кожного з них, а також протестувати дані ендпоінти. Це доволі корисний 
інтсрумент адже при подальшому розширенні системи вона буде обростати 
ендпоінтами. Приклад інтерфейсу користувача даного інструменту зображено на 
рисунку 4.6. 
 56 
ЧДТУ.232228.09 ПЗ 
 
Рисунок 4.6 – Інтерфейс користувача модуля Swagger 
 
Так як даний програмний продукт є частиною більш глобальної системи 
для тренування моделей та прогнозування нижче буде наведено приклад 
інтерфейсу користувача даної системи (див. рис. 4.7 – 4.8). 
 
 
Рисунок 4.7 – Формування вхідних даних для тренування нейронної 
мережі 
 57 
ЧДТУ.232228.09 ПЗ 
 
Рисунок 4.8 – Процес тренування нейронної мережі 
 
4.1.6 Опис розробки програмних компонентів 
Почнемо розробку системи із модуля для тренування нейронної мережі. 
Лістинг модуля тренвання нейронної мережі: 
import os 
 
import tensorflow as tf 
 
 
def train_model(data, job_token): 
    try: 
        print(f"Incoming job token: {job_token}") 
 
        # network parameters 
        epochs = data["configuration"]["epochs"] 
        optimizer = data["configuration"]["optimizer"] 
        activation = data["configuration"]["activation"] 
        loss = data["configuration"]["loss"] 
        layers = data["configuration"]["layers"] 
        batch_size = data["configuration"]["batch_size"] 
        model_id = data["processStructureId"] 
 
        # directories and model path 
        models_dir = "models" 
        model_path = f"{models_dir}/{model_id}.h5" 
 58 
ЧДТУ.232228.09 ПЗ 
 
        # creating model directory if not exists 
        if not os.path.isdir(models_dir): 
            os.makedirs(models_dir) 
 
        # training data 
        train_x = tf.convert_to_tensor( 
            [input_data["data"] for input_data in 
data["training"]["inputs"]], 
            dtype=tf.float32, 
        ) 
        train_y_list = [] 
        for output in data["training"]["outputs"]: 
            train_y_list.append( 
                tf.convert_to_tensor( 
                    output["data"], 
                    dtype=tf.float32, 
                ) 
            ) 
 
        # evaluating data 
        test_x = tf.convert_to_tensor( 
            [input_data["data"] for input_data in 
data["checking"]["inputs"]], 
            dtype=tf.float32, 
        ) 
        test_y_list = [] 
        for output in data["checking"]["outputs"]: 
            test_y_list.append( 
                tf.convert_to_tensor( 
                    output["data"], 
                    dtype=tf.float32, 
                ) 
            ) 
 
        # init model 
        model = tf.keras.models.Sequential() 
 
        # add layers 
        for _ in range(layers): 
            model.add( 
                tf.keras.layers.Dense( 
                    4, input_shape=(train_x.shape[1],), 
activation=activation 
                ) 
            ) 
 
        # for approximation purposes we always need a layer 
with linear activation function 
        model.add(tf.keras.layers.Dense(4, 
activation="linear")) 
 
        # model compilation 
 59 
ЧДТУ.232228.09 ПЗ 
        model.compile(optimizer=optimizer, loss=loss, 
metrics=["mse"]) 
 
        # model training 
        model.fit( 
            train_x, train_y_list, epochs=epochs, 
batch_size=batch_size, verbose=1 
        ) 
 
        # evaluating model on test data 
        loss, accuracy = model.evaluate(test_x, test_y_list) 
 
        # saving model 
        model.save(filepath=model_path) 
 
        print(f"Loss on test data: {loss}") 
        print(f"Accuracy on test data: {accuracy}") 
        print(f"Add job to responses queue that indicate that 
job is finished.") 
    except: 
        print("An exception occurred") 
 
 
def predict_model(model, input_data): 
    try: 
        # Convert input data to the appropriate format (tensor) 
        input_tensor = 
tf.convert_to_tensor([input_data["data"]], dtype=tf.float32) 
 
        # Make predictions using the trained model 
        predictions = model.predict(input_tensor) 
 
        # Post-process the predictions based on your specific 
use case 
        # For example, if the model predicts two values (x and 
y), you can format the results accordingly 
        formatted_predictions = {"x": predictions[0][0], "y": 
predictions[0][1]} 
 
        return formatted_predictions 
    except Exception as e: 
        print(f"An exception occurred during prediction: 
{str(e)}") 
        return None 
Даний модуль здійснює обробку вхідних даних та тренування моделі. 
Після успішного тренування моделі її буде записано на диск у вигляді файлу. 
Створимо модуль серверу, який матиме можливість обробляти вхідні 
запити а також буде перевіряти чергу задач на наявність в ній задач на 
виконання. 
 60 
ЧДТУ.232228.09 ПЗ 
Лістинг модуля серверу: 
import asyncio 
import threading 
from typing import List, Literal 
 
from bullmq import Queue, Worker 
from fastapi import FastAPI 
from pydantic import BaseModel 
 
from model_service import train_model 
 
LOSS_FUNCTIONS = Literal["mean_squared_error", 
"mean_absolute_error"] 
ACTIVATION_FUNCTIONS = Literal["linear", "relu", "sigmoid"] 
OPTIMIZERS = Literal["adam", "rmsprop", "sgd", "adagrad"] 
 
 
class AppModel(BaseModel): 
    service: str 
    author: str 
    contributors: str 
 
 
class ParametersResponse(BaseModel): 
    activation_functions: List 
    loss_functions: List 
    optimizers: List 
 
 
async def process(job, job_token): 
    return train_model(job.data, job_token) 
 
 
app = FastAPI() 
queue = Queue("jobs") 
worker = Worker("jobs", process, {"connection": {"host": 
"localhost", "port": 6379}}) 
def run_worker(): 
    asyncio.run(worker.run()) 
def start_background_tasks(): 
    thread = threading.Thread(target=run_worker) 
    thread.start() 
@app.get("/") 
def read_root() -> AppModel: 
    return AppModel( 
        service="Welcome to model training service. This is my 
work for masters degree diploma =)", 
        author="Serhii Yemelianov", 
        contributors="Vadym Nemchencko, Vadym Horban, Serhii 
Levchenko", 
    ) 
@app.get("/parameters", response_model=ParametersResponse) 
 61 
ЧДТУ.232228.09 ПЗ 
def get_parameters(): 
    return { 
        "activation_functions": ACTIVATION_FUNCTIONS.__args__, 
        "loss_functions": LOSS_FUNCTIONS.__args__, 
        "optimizers": OPTIMIZERS.__args__, 
    } 
@app.post("/enqueue_job") 
async def enqueue_job(data: dict): 
    await queue.add("job", data) 
    return {"message": "Job enqueued successfully."} 
 
if __name__ == "__main__": 
    # Start the worker in the background 
    start_background_tasks() 
 
Як результат маємо сервер, який можу обробляти вхідні запити, 
прослуховувати чергу задач, а також тренувати моделі. 
4.2 Тестування системи 
Тестування є ключовим етапом розробки програмного продукту, оскільки 
воно сприяє визначенню відповідності продукту вимогам, його належному 
функціонуванню та відповідності очікуванням користувачів. Це необхідно для 
забезпечення високої якості та надійності системи. 
Однією з ключових переваг тестування є можливість виявлення та 
усунення помилок на ранніх стадіях розробки. Чим швидше виявляються 
дефекти, тим ефективніше та економніше можна виправити проблеми. Процес 
тестування також сприяє виявленню проблем з продуктивністю та ефективністю 
програми, що дозволяє вчасно впроваджувати виправлення та забезпечувати 
оптимальне функціонування системи. 
Важливо відзначити, що тестування не лише виявляє помилки, але й 
впливає на якість коду. Розробники мають можливість виявляти та виправляти 
проблеми у програмному коді, покращуючи його читабельність та ефективність. 
Це сприяє створенню оптимальноїкодової бази, що полегшує роботу команди та 
забезпечує більш ефективний розвиток продукту. 
Крім того, систематичне тестування дозволяє визначати і вирішувати 
проблеми, які можуть виникнути в реальних умовах експлуатації продукту. Це 
 62 
ЧДТУ.232228.09 ПЗ 
важливо для того, щоб забезпечити стабільну та надійну роботу програмного 
продукту під час його використання кінцевими користувачами. 
Отже, тестування відіграє ключову роль у забезпеченні якості, надійності 
та ефективності програмних продуктів, а його впровадження на ранніх етапах 
розробки має значний позитивний вплив на весь цикл життя продукту. 
4.2.1 Модульне тестування 
Модульне тестування представляє собою метод тестування програмного 
забезпечення, який приділяє особливу увагу окремим компонентам, частинам чи 
модулям програми. Модуль у цьому контексті може означати функцію, клас, 
метод або будь-яку іншу індивідуальну одиницю програмного коду з власною 
функціональністю. Основною метою модульного тестування є впевненість у 
коректності та працездатності цих окремих частин програми. 
У порівнянні з іншими видами тестування, такими як інтеграційне чи 
системне тестування, модульне тестування фокусується на ізоляції конкретного 
модуля від інших компонентів системи. Це дозволяє перевіряти 
функціональність модуля при різних вхідних даних та умовах без урахування 
взаємодії з іншими частинами програми. 
Завдання модульного тестування полягає в перевірці, чи працює 
конкретний модуль так, як очікується, та чи виконує він свої функції правильно. 
Під час модульного тестування розробники створюють тести для перевірки 
окремих властивостей, методів чи функцій модуля. Ці тести можуть включати в 
себе різні сценарії використання та різні вхідні дані з метою виявлення можливих 
помилок чи невідповідностей у роботі модуля. 
Переваги модульного тестування включають збільшення стійкості та 
надійності коду, полегшення виявлення та виправлення помилок на ранніх 
етапах розробки, а також полегшення розподілу роботи між членами команди 
розробки. Модульне тестування стає ключовою складовою частиною 
методологій розробки програмного забезпечення, спрямованих на забезпечення 
якості та стабільності програмних продуктів. 
 63 
ЧДТУ.232228.09 ПЗ 
Під час розробки логіки в даній роботі було написано unit тести для 
перевірки роботи окремих контролерів серверу. 
Лістинг unit тестів: 
import logging 
import unittest 
from fastapi.testclient import TestClient 
from main import app 
logging.basicConfig(level=logging.INFO) 
 
class AppUnitTests(unittest.TestCase): 
    def setUp(self): 
        self.client = TestClient(app) 
    def test_read_root(self): 
        response = self.client.get("/") 
        self.assertEqual(response.status_code, 200) 
        self.assertEqual( 
            response.json(), 
            { 
                "service": "Welcome to model training service. 
This is my work for masters degree diploma =)", 
                "author": "Serhii Yemelianov", 
                "contributors": "Vadym Nemchencko, Vadym 
Horban, Serhii Levchenko", 
            }, 
        ) 
    def test_get_parameters(self): 
        response = self.client.get("/parameters") 
        self.assertEqual(response.status_code, 200) 
        self.assertEqual( 
            response.json(), 
            { 
                "activation_functions": ["linear", "relu", 
"sigmoid"], 
                "loss_functions": ["mean_squared_error", 
"mean_absolute_error"], 
                "optimizers": ["adam", "rmsprop", "sgd", 
"adagrad"], 
            }, 
        ) 
 
    def test_enqueue_job(self): 
        data = { 
            "processId": "training_test", 
            "processStructureId": "training_test", 
            "configuration": { 
                "optimizer": "adam", 
                "loss": "mean_squared_error", 
                "epochs": 10, 
                "batch_size": 10, 
                "activation": "linear", 
 64 
ЧДТУ.232228.09 ПЗ 
                "layers": 20, 
            }, 
            "training": { 
                "inputs": [ 
                    {"name": "name1", "data": [1, 2, 3, 4]}, 
                    {"name": "name2", "data": [1, 2, 3, 4]}, 
                    {"name": "name3", "data": [1, 2, 3, 4]}, 
                    {"name": "name4", "data": [1, 2, 3, 4]}, 
                ], 
                "outputs": [{"name": "name1", "data": [1, 2, 3, 
4]}], 
            }, 
            "checking": { 
                "inputs": [ 
                    {"name": "nameX1", "data": [1, 2, 3, 4]}, 
                    {"name": "nameX2", "data": [1, 2, 3, 4]}, 
                    {"name": "nameX3", "data": [1, 2, 3, 4]}, 
                    {"name": "nameX4", "data": [1, 2, 3, 4]}, 
                ], 
                "outputs": [{"name": "nameY", "data": [1, 2, 3, 
4]}], 
            }, 
        } 
        response = self.client.post("/enqueue_job", json=data) 
        self.assertEqual(response.status_code, 200) 
        self.assertEqual(response.json(), {"message": "Job 
enqueued successfully."}) 
if __name__ == "__main__": 
    unittest.main() 
 
Рузльтати виконання unit тестів зображено на рисунку  4.9 
 
 
Рисунок 4.9 – Результат виконання unit тестів 
 65 
ЧДТУ.232228.09 ПЗ 
4.2.2 Інтеграційне тестування 
У цьому дослідженні, окрім проведення модульного тестування, 
розроблені автоматичні тести для інтеграційного тестування. Інтеграційне 
тестування визначається як тип тестування, при якому програмні модулі логічно 
поєднані та піддані тестуванню як єдина група. 
Автоматичне інтеграційне тестування має на меті перевірку взаємодії між 
окремими модулями системи, а також їхню взаємну сумісність. Це дозволяє 
виявити можливі проблеми, які можуть виникнути при об'єднанні різних частин 
програми та забезпечити їхню синергію в єдиному функціональному цілому. 
Автоматизовані тести в цьому контексті дозволяють ефективно визначити, чи 
взаємодіють компоненти програми правильно та чи зберігають очікувану 
функціональність під час їхнього об'єднання. 
Інтеграційне тестування є важливим етапом в процесі забезпечення якості 
програмного забезпечення, оскільки воно спрямоване на виявлення взаємодій та 
залежностей між різними частинами системи. Цей підхід дозволяє уникнути 
потенційних проблем, які можуть виникнути при роботі системи в комплексі. 
Завдяки автоматизації тестів, можна швидше та ефективніше виявити та 
виправити будь-які несумісності або невідповідності в процесі інтеграції. 
Отже, поєднання модульного та інтеграційного тестування створює 
надійний механізм перевірки різних аспектів програмного продукту та 
допомагає забезпечити його стабільність та високу якість. 
В процесі розробки системи було написано unit тести для перевірки роботи 
всих складових системи водночас. 
Лістинг unit тестів: 
import logging 
import unittest 
 
from fastapi.testclient import TestClient 
 
from main import app 
 
logging.basicConfig(level=logging.INFO)  # Set the logging 
level as needed 
 66 
ЧДТУ.232228.09 ПЗ 
 
 
class TestIntegration(unittest.TestCase): 
    def setUp(self): 
        self.client = TestClient(app) 
 
    def test_full_workflow(self): 
        logging.info("Testing the full workflow...") 
 
        # Test read_root endpoint 
        response = self.client.get("/") 
        self.assertEqual(response.status_code, 200) 
        self.assertEqual( 
            response.json(), 
            { 
                "service": "Welcome to model training service. 
This is my work for masters degree diploma =)", 
                "author": "Serhii Yemelianov", 
                "contributors": "Vadym Nemchencko, Vadym 
Horban, Serhii Levchenko", 
            }, 
        ) 
 
        # Test get_parameters endpoint 
        response = self.client.get("/parameters") 
        self.assertEqual(response.status_code, 200) 
        self.assertEqual( 
            response.json(), 
            { 
                "activation_functions": ["linear", "relu", 
"sigmoid"], 
                "loss_functions": ["mean_squared_error", 
"mean_absolute_error"], 
                "optimizers": ["adam", "rmsprop", "sgd", 
"adagrad"], 
            }, 
        ) 
 
        # Test enqueue_job endpoint 
        data = { 
            "processId": "training_test", 
            "processStructureId": "training_test", 
            "configuration": { 
                "optimizer": "adam", 
                "loss": "mean_squared_error", 
                "epochs": 10, 
                "batch_size": 10, 
                "activation": "linear", 
                "layers": 20, 
            }, 
            "training": { 
                "inputs": [ 
                    {"name": "name1", "data": [1, 2, 3, 4]}, 
 67 
ЧДТУ.232228.09 ПЗ 
                    {"name": "name2", "data": [1, 2, 3, 4]}, 
                    {"name": "name3", "data": [1, 2, 3, 4]}, 
                    {"name": "name4", "data": [1, 2, 3, 4]}, 
                ], 
                "outputs": [{"name": "name1", "data": [1, 2, 3, 
4]}], 
            }, 
            "checking": { 
                "inputs": [ 
                    {"name": "nameX1", "data": [1, 2, 3, 4]}, 
                    {"name": "nameX2", "data": [1, 2, 3, 4]}, 
                    {"name": "nameX3", "data": [1, 2, 3, 4]}, 
                    {"name": "nameX4", "data": [1, 2, 3, 4]}, 
                ], 
                "outputs": [{"name": "nameY", "data": [1, 2, 3, 
4]}], 
            }, 
        } 
        response = self.client.post("/enqueue_job", json=data) 
        self.assertEqual(response.status_code, 200) 
        self.assertEqual(response.json(), {"message": "Job 
enqueued successfully."}) 
 
        # Add more integration tests as needed... 
 
 
if __name__ == "__main__": 
    unittest.main() 
 
Запустивши розроблений тест ми можемо переконатися, що всі складові 
системи працюють коректно (див. рис. 4.10). 
 
 
 
Рисунок 4.10 – Результат виконання інтеграційних unit тестів 
 68 
ЧДТУ.232228.09 ПЗ 
4.2.3 Системне тестування 
В даній роботі розроблено одну із складових більш великої системи, а саме, 
сервіс (сервер) для тренування та зберігання моделей за допогою нейронних 
мереж. Сервер сам по собі не має, для перевірки роботи розробленої системи 
було використано програму Postman, яка дозволяє легко та зручно тестувати і 
перевіряти роботу API сервісів. 
Для запуску серверу необхідно виконати команду docker-compose up -d. В 
результаті виконна даної команди буде запущено розроблений сервер. 
Перевіримо роботу серверу відправивши запит на GET / – отримання 
інформації про сервер (див. рис. 4.11) 
 
 
Рисунок 4.11 – Результат виконнаня запиту на перревірку статусу серверу 
 
GET /parameters – отрмання лістингів підтримуваниї парамертів для 
налаштування нейронної мережі. Результат виконання даного запиту зображено 
на рис. 4.12. 
 69 
ЧДТУ.232228.09 ПЗ 
 
Рисунок 4.12 – Результат виконання запиту на отримання параметрів 
нейронної мережі 
 
POST /enqueue_job – запит на побудову моделі. Результат виконання 
зображено на рис. 4.13. 
 
Рисунок 4.13 – Результат виконання запиту на побудову моделі 
 70 
ЧДТУ.232228.09 ПЗ 
4.2.4 Приймальне тестування 
Даний вид тестування на даний момент провести не можливо, так як 
приймальне тестування проводиться організацією, яка приймає в роботу 
розроблений програмний продукт, а система ще знаходиться на активному етапі 
розробки. 
4.3 Приклади впровадження програмного комплексу 
Триває активна розробка всіх підсистем тому навести приклад 
впровадження даного комплексу не можливо. Систему буде впроваджено по 
завершенню активного етапу розробки.  
 71 
ЧДТУ.232228.09 ПЗ 
Висновки до розділу 
У цьому розділі було ретельно обґрунтовано вибір засобів реалізації та 
методу розробки системи, надано чіткий опис логічної та структурної схем. 
Важливі рішення щодо технологічних аспектів та архітектурних виборів були 
ухвалені на підставі їхньої відповідності вимогам проєкту та завданням реалізації 
ефективної та надійної системи. 
Описана логічна та структурна схеми дозволила зрозуміти внутрішні 
взаємозв'язки та функціональність кожного компонента системи. Це створило 
важливу основу для подальшої розробки та впровадження проєкту. 
Завершальний етап тестування підтвердив коректну роботу системи без 
критичних помилок, що свідчить про високу якість розробки на даному етапі. 
Виявлені та виправлені невеликі неполадки сприяли підвищенню стійкості та 
надійності системи. 
Отже, на даному етапі розробки успішно виконано обґрунтування, 
описання та тестування системи, і можна зробити висновок, що вона готова до 
подальших етапів вдосконалення та впровадження в реальне виробниче 
середовище. 
  
 72 
ЧДТУ.232228.09 ПЗ 
ВИСНОВКИ 
У ході даного дослідження було проведено вичерпний аналіз існуючих 
методів та засобів, спрямованих на розв'язання визначених завдань. Перший 
розділ висвітлив різноманітні аспекти програмування нейронних мереж, методів 
навчання агентів та типів нейронних мереж, підкреслюючи їхню актуальність у 
сучасних дослідженнях. 
Аналіз застосування згорткових, рекурентних, багатошарових 
персептронів та генеративних нейронних мереж в схожих дослідженнях, дав 
можливість визначити переваги та обмеження кожного типу мережі в 
конкретних використаннях. 
В другому розділі проведено теоретичні та експериментальні дослідження, 
що сприяло поглибленню розуміння принципів роботи нейронних мереж та 
методів навчання. Отримані знання стали фундаментом для подальших етапів 
дослідження. 
Аналіз та проєктування системи, яке викладено у третьому розділі, 
враховувало відомості, отримані на попередніх етапах, та спрямовувало їх на 
практичну реалізацію. Описані діаграми та моделі дали чітке уявлення про 
структуру та взаємозв'язки компонентів системи. 
У четвертому розділі проведено етап розробки та тестування системи. 
Обґрунтовано вибір засобів реалізації та методу розробки, а також виконано 
детальний опис логічної та структурної схем. Результати тестування свідчать про 
коректну роботу системи на даному етапі. Результатом виконання дипломної 
роботи є агентно-орієнтована інформаційна система на основі нейронних мереж. 
Ця система призначена для тренування моделей за допомогою нейронних мереж. 
Агентно-орієнтовану систему інформаційну систему на основі нейронних 
мереж було розроблено за допомогою мови програмування Python. 
При розробці ІС було побудовано такі діаграми: 
– діаграма класів; 
– діаграма пакетів; 
 73 
ЧДТУ.232228.09 ПЗ 
– діаграма компонентів; 
– діаграма розгортання; 
– діаграма діяльності; 
– діаграма послідовності; 
– діаграма комунікацій; 
– діаграма кінцевого автомату. 
При тестування ІС показала себе відмінно на тесті всі тести були пройдені 
успішно і тому розроблена агентно-орієнтована інформаційна система повністю 
готова до впровадження. 
  
 74 
ЧДТУ.232228.09 ПЗ 
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ 
1 Методичні рекомендації до підготовки кваліфікаційної роботи магістра 
для здобувачів вищої освіти другого (магістерського) рівня зі спеціальності 121 
«Інженерія програмного забезпечення» усіх форм навчання [Текст] /Укл.: Голуб 
С.В., Данченко О.Б., Півень О.Б. ; М-во освіти і науки України, Черкас, держ. 
технол. ун-т. - Черкаси : ЧДТУ, 2022. - 104 с. 
2 Richard S. Sutton, Andrew G. Barto. Reinforcement Learning: An 
Introduction: The MIT Press, 2018. - 548 p. 
3 Aurélien Géron. Hands-On Machine Learning with Scikit-Learn, Keras, and 
TensorFlow: O'Reilly Media, 2019. - 510 p. 
4 Shai Shalev-Shwartz, Shai Ben-David. An Introduction to Unsupervised 
Learning: Cambridge University Press, 2014. - 375 p. 
5 Ian Goodfellow, Yoshua Bengio, Aaron Courville. Deep Learning: MIT 
Press, 2016. - 800 p. 
6 Charu C. Aggarwal. Neural Networks and Deep Learning: A Textbook: 
Springer, 2018. - 512 p. 
7 David Foster. Generative Deep Learning: Teaching Machines to Paint, Write, 
Compose, and Play: O'Reilly Media, 2019. - 322 p. 
8 Rajalingappaa Shanmugamani. Deep Learning for Computer Vision: Packt 
Publishing, 2018. - 330 p. 
9 Jason Brownlee. Recurrent Neural Networks in Python: Introduction to 
LSTM: Machine Learning Mastery, 2017. - 229 p. 
10 Foster David. Generative Deep Learning: Teaching Machines to Paint, Write, 
Compose and Play: Applied Data Science Partners Ltd, 2019. - 330 p. 
11 Douwe Osinga. Deep Learning Cookbook: O'Reilly Media, 2018. - 227 p. 
 75 
ЧДТУ.232228.09 ПЗ 
ДОДАТОК А 
 
 ЗАТВЕРДЖЕНО:  
 Зав. кафедрою ПЗАС, професор   
_____________ Голуб С.В.  
 „____” _________________ 2023 р.  
  
  
  
  
Розробка агентно-орієнтованої інформаційної системи на основі нейронних 
мереж  
  
  
Специфікація  
482.ЧДТУ.232228-01 
Листів 2  
  
  
Розробник  ________________  Ємелянов С.А. 
 
Керівник  ________________ Немченко В.В. 
 
Контроль  ________________  Півень О.Б. 
 
 
 
  
2023  
 
Ч4Д8Т2У.Ч.Д23Т2У2.2283.20292 П8З-0 1  2 
 
Позначення  Найменування  Примітка  
482.ЧДТУ.232228-01 34 01 Інструкція користувача    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
   
   
 
 77 
ЧДТУ.232228.09 ПЗ 
ДОДАТОК Б 
  
 
 
 
  
  
  
Розробка агентно-орієнтованої інформаційної системи на основі нейронних 
мереж  
  
  
Інструкція користувача 
482.ЧДТУ.232228-01 34 01 
Листів 2  
  
  
  
Розробник  ________________  Ємелянов С.А. 
 
 
 
 
 
 
 
 
2023
 
482Ч.ЧДДТТУУ.2.32322222288.0-90 1П 3З4 01 2 
 
Для початку потрібно виконати команду в yarn install.  
Команда yarn install використовується в контексті управління 
залежностями у програмуванні, зокрема в JavaScript проектах, що 
використовують Yarn як менеджер пакетів. Ця команда ініціює процес 
встановлення залежностей, визначених у файлі package.json, який є стандартним 
для Node.js проектів. yarn install читає визначення пакетів у package.json, а потім 
завантажує їх з віддаленого сховища пакетів, такого як npm registry. 
Ключовим елементом цього процесу є створення або оновлення файлу 
yarn.lock, який містить точну інформацію про версії всіх встановлених пакетів та 
їх залежностей. Це гарантує консистентність залежностей між різними 
середовищами розробки і запобігає проблемам, пов'язаним із варіативністю 
версій. 
Основна мета yarn install - забезпечити наявність усіх необхідних 
залежностей для роботи проекту, відповідно до визначених вимог. Це дозволяє 
розробникам швидко налаштувати робоче середовище для розробки або запуску 
проекту, оскільки усі необхідні залежності автоматично встановлюються в 
локальний проект.  
Далі потрібно виконати команду yarn start. Ця команда запускає сам 
сервер. Після виконання цих команд додаток готовий до роботи з ним. 
 79