Please use this identifier to cite or link to this item: https://er.chdtu.edu.ua/handle/ChSTU/6655
Title: Управління проєктом створення веб-орієнтованого застосунку для розв’язування оптимізаційних задач чисельними методами
Authors: Триус, Юрій Васильович
Заєць, Володимир Михайлович
Keywords: УПРАВЛІННЯ ПРОЄКТОМ;ОПТИМІЗАЦІЯ;ВЕБ-ОРІЄНТОВАНИЙ ЗАСТОСУНОК;ЧИСЕЛЬНІ МЕТОДИ ОПТИМІЗАЦІЇ;ОБЧИСЛЕННЯ;ВІЗУАЛІЗАЦІЯ;ПЛАНУВАННЯ;СИСТЕМНИЙ АНАЛІЗ
Issue Date: 17-Dec-2025
Abstract: Чисельні методи оптимізації є фундаментальною складовою сучасних наукових досліджень, інженерних розрахунків та прикладних задач у галузях штучного інтелекту, машинного навчання, логістики, економічного моделювання та інших напрямів. Багато існуючих систем для роботи з оптимізаційними задачами мають складний інтерфейс або орієнтовані лише на фахівців з високим рівнем підготовки, що обмежує їх використання у навчальному середовищі та прикладних дослідженнях. Відсутність універсального, доступного та інтерактивного інструмента для дослідження поведінки різних алгоритмів оптимізації у реальному часі зумовлює потребу у розробці веб-орієнтованого застосунку, який поєднував би обчислювальні можливості, візуалізацію та сучасні підходи до управління проєктами. Актуальність кваліфікаційної роботи магістра визначається необхідністю створення інтерактивної, доступної та масштабованої платформи, що дозволяє виконувати задачі оптимізації, аналізувати їх результати, візуалізувати динаміку алгоритмів та забезпечує зручний веб-інтерфейс для широкого кола користувачів. Метою кваліфікаційної роботи магістра є розробка та обґрунтування концепції управління проєктом створення веб-орієнтованого застосунку для розв’язування оптимізаційних задач чисельними методами, що поєднує дослідження теоретичних аспектів управління ІТ-проєктами з практичною реалізацією програмного продукту. Об’єкт дослідження: процеси управління проєктом створення веб-орієнтованого застосунку. Предмет дослідження: проєкт створення веб-орієнтованого застосунку для розв’язування оптимізаційних задач чисельними методами. Методи дослідження. Системний аналіз, метод декомпозиції, методи управління ризиками, мережне планування, теорія імовірностей, метод бюджетування «знизу нагору», програмно-технологічні методи проєктування веб-систем, методи тестування програмного забезпечення, прийоми програмування на мовах програмування: Java, Python, JavaScript. Апробація результатів роботи. Основні положення і результати кваліфікаційної роботи магістра доповідалися і були обговорені на ІV міжнародній науково-практичній Інтернет-конференції «Інновації та перспективні шляхи розвитку інформаційних технологій» (ІПШРІТ-2025) (Черкаси, 2025) (25 листопада 2025). Публікації. Результати кваліфікаційної роботи магістра опубліковані у збірнику тез доповідей ІV міжнародній науково-практичній Інтернет-конференції «ІПШРІТ-2025»: Заєць В.М., Триус Ю.В. Управління проєктом створення веб-орієнтованого застосунку для розв’язання оптимізаційних задач: Збірник тез доповідей ІV Міжнар. наук.-практич. конфер. «Інновації та перспективні шляхи розвитку інформаційних технологій» (25 лист. 2025 р., м. Черкаси) [Електронний ресурс] / упоряд. : Т. О. Прокопенко, О. І. Підкуйко. М-во освіти і науки України, Черкас. держ. технол. ун-т. Черкаси : ЧДТУ, 2025. С. 139-140.
URI: https://er.chdtu.edu.ua/handle/ChSTU/6655
Appears in Collections:122 Комп’ютерні науки (Управління стартапами і проектами в галузі інформаційних технологій)

Files in This Item:
File Description SizeFormat 
Пояснювальна записка_Заєць Володимир_МСТП-2402_2025-2026.pdf
  Restricted Access
4.88 MBAdobe PDFView/Open Request a copy


Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.

Extracted text
 
 
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ 
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ 
 
Факультет інформаційних технологій і систем 
 
Кафедра комп’ютерних наук та системного аналізу 
 
 
 
 
 
 
 
 
Пояснювальна записка 
до кваліфікаційної роботи 
                                             магістра       
 (освітньо-кваліфікаційний рівень) 
 
на тему: «Управління проєктом створення веб-орієнтованого застосунку для 
розв’язування оптимізаційних задач чисельними методами» 
 
 
 
 
Виконав: студент 2 курсу, групи МСТП-2402 
  
спеціальності 122  «Комп’ютерні науки» 
                                                             (шифр і назва спеціальності) 
 
освітня програма «Управління стартапами                                                                                                                               
(назва освітньої програми) 
і проєктами в галузі інформаційних технологій» 
 
 Заєць Володимир Михайлович 
 
 
Керівник                             Триус Ю.В.      
                                                   (прізвище та ініціали) 
 
Рецензент                           Красношлик Н.О.  
                                                           (прізвище та ініціали) 
 
 
 
 
Черкаси 2025 року  
 
 
Бланк завдання на кваліфікаційну роботу магістра студенту 
 
Черкаський державний технологічний університет 
Факультет Інформаційних технологій і систем 
Кафедра Комп’ютерних наук та системного аналізу 
Освітньо-кваліфікаційний рівень Магістр 
Спеціальність 122 – комп’ютерні науки  
Освітня програма Управління стартапами і проєктами в галузі інформаційних технологій                                                                                                                             
 
 
ЗАТВЕРДЖУЮ 
Завідувач кафедри КНСА  
_______________ Юрій ТРИУС 
«____» _____________ 20__ р. 
 
 
 
ЗАВДАННЯ 
на кваліфікаційну роботу магістра студенту 
Зайцю Володимиру Михайловичу 
(прізвище, ім‘я, по батькові) 
1. Тема роботи Управління проєктом створення веб-орієнтованого застосунку для 
                                                     розв’язування оптимізаційних задач чисельними методами 
Керівник роботи        Триус Юрій Васильович, к.ф.-м.н., д.пед.н., професор 
(прізвище, ім’я, по батькові, науковий ступінь, вчене звання) 
затверджені наказом університету від «07» жовтня 2025 р. №307/03-03. 
 
2. Строк подання студентом роботи     15.12.2025 року.  
 
 
3. Вихідні дані до роботи: 
результати та матеріали з проходження виробничої та переддипломної практики 
 
 
4. Зміст пояснювальної записки (перелік питань, що їх належить розробити): 
Вступ 
1. Аналіз передумов реалізації проєкту 
2. Розробка концепції проєкту 
3. Планування проєкту 
4. Практична реалізація проєкту 
Висновки 
  
5. Перелік додатків (з точним зазначенням назв додатків): 
А . Специфікація 
1ББ..   ІТнесктсрту кпцріояг ркаомриис тувача 
В. Інструкція користувача 
Г. Публікації з теми кваліфікаційної роботи магістра 
 
 
 
 
6. Консультанти розділів роботи 
Прізвище, ініціали та Підпис, дата 
Розділ посада 
завдання видав завдання прийняв 
консультанта 
    
    
 
7. Дата видачі завдання 01.09.2025 р. 
  
 
КАЛЕНДАРНИЙ ПЛАН 
Строк виконання 
№ з/п Назва етапів кваліфікаційної роботи магістра Примітка 
етапів роботи 
1 Видача завдання на кваліфікаційну роботу 
до 01.09.2025 виконано 
магістра. 
2 Аналіз літературних джерел, об’єкту та предмету виконано 
до 15.09.2025 
дослідження. 
3 Написання теоретичного розділу кваліфікаційної виконано 
до 01.10.2025 
роботи магістра. 
4 Написання аналітичного розділу (аналіз об’єкту виконано 
до 03.11.2025 
й предмету дослідження). 
5 Написання практичних розділів й висновків виконано 
до 01.12.2025 
кваліфікаційної роботи магістра. 
6 Передзахист кваліфікаційної роботи магістра на виконано 
до 01.12.2025 
засіданні випускової кафедри. 
7 Подання роботи завідувачу кафедри КН та СА. до 15.12.2025 виконано 
8 Захист кваліфікаційної роботи магістра. 17.12.2025 виконано 
    
    
    
    
 
 
Студент                                   _____________________________    /____Заєць В.М.____/  
(підпис)                                                                    ПІБ 
 
Керівник роботи                     ____________________________     /____Триус Ю.В.____/ 
                                          (підпис)                                                                   ПІБ 
  
 
 
РЕФЕРАТ 
Кваліфікаційна робота магістра містить: 96 с. основного тексту, 37 рис., 
4 табл., 34 використаних джерел, 4 додатки.  
Актуальність теми. 
Чисельні методи оптимізації є фундаментальною складовою сучасних наукових 
досліджень, інженерних розрахунків та прикладних задач у галузях штучного 
інтелекту, машинного навчання, логістики, економічного моделювання та інших 
напрямів. Багато існуючих систем для роботи з оптимізаційними задачами мають 
складний інтерфейс або орієнтовані лише на фахівців з високим рівнем підготовки, 
що обмежує їх використання у навчальному середовищі та прикладних дослідженнях. 
Відсутність універсального, доступного та інтерактивного інструмента для 
дослідження поведінки різних алгоритмів оптимізації у реальному часі зумовлює 
потребу у розробці веб-орієнтованого застосунку, який поєднував би обчислювальні 
можливості, візуалізацію та сучасні підходи до управління проєктами. Актуальність 
кваліфікаційної роботи магістра визначається необхідністю створення інтерактивної, 
доступної та масштабованої платформи, що дозволяє виконувати задачі оптимізації, 
аналізувати їх результати, візуалізувати динаміку алгоритмів та забезпечує зручний 
веб-інтерфейс для широкого кола користувачів.  
Мета роботи і задачі дослідження. Метою кваліфікаційної роботи магістра є 
розробка та обґрунтування концепції управління проєктом створення веб-
орієнтованого застосунку для розв’язування оптимізаційних задач чисельними 
методами, що поєднує дослідження теоретичних аспектів управління ІТ-проєктами з 
практичною реалізацією програмного продукту. 
Для досягнення поставленої мети необхідно вирішити такі задачі: 
– виконати огляд чисельних методів оптимізації, сфер їх застосування та 
програмних засобів для їх реалізації; 
– провести аналіз предметної області та визначити структуру майбутнього 
продукту; 
– сформувати концепцію веб-застосунку та обґрунтувати вибір 
архітектурних рішень; 
 
 
– розробити структури та плани управління проєктом; 
– виконати планування часових, ресурсних та вартісних параметрів за 
допомогою MS Project; 
– розробити базу даних та модель даних застосунку; 
– реалізувати веб-орієнтований застосунок з використанням сучасних 
інформаційних технологій та мов програмування; 
– провести тестування функціональності, продуктивності та математичної 
коректності розробленого веб-застосунку. 
Об’єкт дослідження: процеси управління проєктом створення веб-
орієнтованого застосунку. 
Предмет дослідження: проєкт створення веб-орієнтованого застосунку для 
розв’язування оптимізаційних задач чисельними методами.  
Методи дослідження. Системний аналіз, метод декомпозиції, методи 
управління ризиками, мережне планування, теорія імовірностей, метод 
бюджетування «знизу нагору», програмно-технологічні методи проєктування веб-
систем, методи тестування програмного забезпечення, прийоми програмування на 
мовах програмування: Java, Python, JavaScript. 
Апробація результатів роботи. Основні положення і результати 
кваліфікаційної роботи магістра доповідалися і були обговорені на ІV міжнародній 
науково-практичній Інтернет-конференції «Інновації та перспективні шляхи розвитку 
інформаційних технологій» (ІПШРІТ-2025) (Черкаси, 2025) (25 листопада 2025). 
Публікації. Результати кваліфікаційної роботи магістра опубліковані у 
збірнику тез доповідей ІV міжнародній науково-практичній Інтернет-конференції 
«ІПШРІТ-2025»: Заєць В.М., Триус Ю.В. Управління проєктом створення веб-
орієнтованого застосунку для розв’язання оптимізаційних задач: Збірник тез доповідей 
ІV Міжнар. наук.-практич. конфер. «Інновації та перспективні шляхи розвитку 
інформаційних технологій» (25 лист. 2025 р., м. Черкаси) [Електронний ресурс] / 
упоряд. : Т. О. Прокопенко, О. І. Підкуйко. М-во освіти і науки України, Черкас. держ. 
технол. ун-т. Черкаси : ЧДТУ, 2025. С. 139-140. 
 
 
Перелік ключових слів: УПРАВЛІННЯ ПРОЄКТОМ, ОПТИМІЗАЦІЯ, ВЕБ-
ОРІЄНТОВАНИЙ ЗАСТОСУНОК, ЧИСЕЛЬНІ МЕТОДИ ОПТИМІЗАЦІЇ, 
ОБЧИСЛЕННЯ, ВІЗУАЛІЗАЦІЯ, ПЛАНУВАННЯ, СИСТЕМНИЙ АНАЛІЗ. 
  
 
 
ABSTRACT 
Master's qualifying work includes: 96 p. of main text, 37 rites, 4 tabl., 34 sources 
used, 4 appendices. 
Relevance of the topic. 
Numerical optimization methods are a fundamental component of modern scientific 
research, engineering calculations, and applied tasks in the fields of artificial intelligence, 
machine learning, logistics, economic modeling, and other areas. Many existing systems for 
working with optimization problems have a complex interface or are oriented only toward 
highly qualified specialists, which limits their use in educational environments and applied 
research. The absence of a universal, accessible, and interactive tool for studying the 
behavior of various optimization algorithms in real time determines the need to develop a 
web-oriented application that would combine computational capabilities, visualization, and 
modern project management approaches. The relevance of this master's qualification work 
is explained by the necessity of creating an interactive, accessible, and scalable platform 
that allows performing optimization tasks, analyzing their results, visualizing algorithm 
dynamics, and providing a convenient web interface for a wide range of users. 
Purpose and research tasks. The purpose of the master's qualification work is to 
develop and justify a project management concept for creating a web-oriented application 
for solving optimization problems using numerical methods, combining the study of 
theoretical aspects of IT-project management with the practical implementation of a 
software product. 
To achieve this purpose, the following tasks must be solved: 
 perform a review of numerical optimization methods, their areas of application, 
and software tools for their implementation; 
 conduct an analysis of the subject domain and determine the structure of the future 
product; 
 formulate the concept of the web application and justify the choice of architectural 
solutions; 
 develop project structures and project management plans; 
 
 
 perform time, resource, and cost planning using MS Project; 
 develop the database and data model of the application; 
 implement the web-oriented application using modern information technologies 
and programming languages; 
 conduct testing of the developed web application, including its functionality, 
performance, and mathematical correctness. 
Object of research: the processes of managing the project of creating a web-oriented 
application. 
Subject of research: the project of creating a web-oriented application for solving 
optimization problems using numerical methods. 
Research methods. System analysis, decomposition method, risk management 
methods, network planning, probability theory, bottom-up budgeting, software and web-
system engineering methods, software testing methods, and programming techniques in 
Java, Python, JavaScript. 
Approval of research results. The main provisions and results of the master's 
qualification work were presented and discussed at the IV International Scientific and 
Practical Internet Conference “Innovations and Prospective Development Paths of 
Information Technologies” (IPDPIT-2025) (Cherkasy, 2025) (November 25, 2025). 
Publications. The results of the master's qualification work were published in the 
collection of abstracts of the IV International Scientific and Practical Internet Conference 
“IPSHRIT-2025”: V.M. Zaiets, Y.V. Tryus Project management for creating a web-oriented 
application for solving optimization problems: Collection of abstracts of the IV International 
Scientific and Practical Internet Conference “Innovations and Prospective Development 
Paths of Information Technologies” (November 25, 2025, Cherkasy) [Electronic resource] 
/ compiled by T.O. Prokopenko, I.O. Pyduyko. Ministry of Education and Science of 
Ukraine, Cherkasy State Technological University. Cherkasy: ChDTU, 2025. pp. 139-140. 
The key words: PROJECT MANAGEMENT, OPTIMIZATION, WEB-ORIENTED 
APPLICATION, NUMERICAL OPTIMIZATION METHODS, COMPUTATION, 
VISUALIZATION, PLANNING, SYSTEM ANALYSIS.
8 
 
ЗМІСТ 
ВСТУП ······························································································· 10 
1 АНАЛІЗ ПЕРЕДУМОВ РЕАЛІЗАЦІЇ ПРОЄКТУ ········································ 13 
1.1 Актуальність   проєкту  з   розробки    веб-орієнтованого    застосунку   для 
розв’язання задач оптимізації ·························································· 13 
1.2 Системний аналіз предметної області та об’єкта дослідження ·················· 14 
1.3 Постановка та обґрунтування проблеми ············································· 17 
1.4 Методи та засоби вирішення проблеми ·············································· 20 
1.4.1 Математичні методи оптимізації ················································ 20 
1.4.2 Програмно-технологічна архітектура системи ······························· 21 
1.4.3 Безпека, масштабованість і розширюваність ································· 22 
1.5 Аналіз ринку програмного забезпечення розв’язання задач оптимізації ······ 24 
Висновки до розділу 1 ·········································································· 27 
2 РОЗРОБКА КОНЦЕПЦІЇ ПРОЄКТУ ······················································· 30 
2.1 Життєвий цикл проєкту  ································································· 30 
2.2 Ідентифікація зацікавлених сторін ···················································· 34 
2.3 Місія, мета, цілі та цінності проєкту ·················································· 37 
2.4 Структура веб-застосунку ······························································· 41 
2.5 Очікувані результати реалізації ІТ-проєкту ········································· 44 
Висновки до розділу 2 ·········································································· 47 
3 ПЛАНУВАННЯ ПРОЄКТУ ··································································· 50 
3.1 Планування змісту проєкту ····························································· 50 
3.2 Планування часових ресурсів проєкту ················································ 54 
3.3 Планування трудових ресурсів проєкту ·············································· 57 
3.4 Планування якості проєкту ····························································· 59 
3.5 Планування ризиків проєкту ···························································· 60 
3.6 Планування бюджету проєкту ·························································· 61 
3.7 Планування закупівель проєкту ························································ 62 
3.8 Планування комунікацій проєкту ······················································ 63 
Висновки до розділу 3 ·········································································· 65 
9 
 
4 ПРАКТИЧНА РЕАЛІЗАЦІЯ ПРОЄКТУ ··················································· 67 
4.1 Опис продукту проєкту ·································································· 67 
4.2 Опис процесу реалізації проєкту ······················································· 79 
4.3 Тестування продукту і аналіз результатів ············································ 82 
Висновки до розділу 4 ·········································································· 89 
ВИСНОВКИ ························································································· 91 
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ ······················································· 93 
Додаток А Специфікація ·········································································· 97 
Додаток Б Текст програми ······································································· 99 
Додаток В Інструкція користувача ··························································· 138 
Додаток Г Публікації з теми кваліфікаційної роботи магістра ························· 144 
  
10 
 
ВСТУП 
Актуальність теми. Сучасні тенденції розвитку інформаційних технологій 
свідчать про стрімке зростання попиту на інструменти, що дозволяють вирішувати 
складні математичні задачі, зокрема задачі оптимізації, у зручній та доступній формі. 
Чисельні методи оптимізації є ключовим елементом великої кількості прикладних 
галузей: штучного інтелекту, машинного та глибинного навчання, аналізу даних, 
економічного прогнозування, інженерного моделювання, біоінформатики, логістики 
та управління складними системами. Вони дозволяють знаходити найкращі рішення 
серед великої кількості можливих варіантів, що робить їх надзвичайно важливими у 
наукових дослідженнях та практичній діяльності. 
Разом із тим, існуючі інструменти для роботи з методами оптимізації часто 
мають суттєві обмеження. Більшість з них представлені у вигляді бібліотек або 
фреймворків, що передбачають використання мов програмування і вимагають 
високого рівня підготовки користувача. Значна частина готових систем орієнтована 
на фахівців із широкими технічними компетенціями та не підходить для студентів, 
дослідників-початківців або користувачів без глибокої математичної підготовки. 
Окремі веб-системи для оптимізації або занадто спрощені, або не забезпечують 
належного рівня візуалізації та аналітичних інструментів, що ускладнює процес 
вивчення та порівняння методів оптимізації. 
Актуальність теми кваліфікаційної роботи зумовлена потребою у створенні 
сучасного, гнучкого та доступного веб-орієнтованого застосунку, який дозволив би 
користувачам розв’язувати задачі оптимізації, досліджувати їх властивості, 
аналізувати поведінку різних методів, а також отримувати наочне уявлення про їх 
збіжність, точність та ефективність. Особливо важливою є можливість інтерактивної 
візуалізації результатів обчислень, оскільки графічне представлення динаміки 
ітераційних процесів значно полегшує розуміння роботи методів оптимізації, 
дозволяє швидко оцінити стабільність та якість знайдених розв’язків і робить процес 
дослідження більш структурованим. 
Актуальність теми підсилюється й тим, що в освітньому процесі технічних 
спеціальностей закладів вищої освіти, де вивчають методи оптимізації та дослідження 
11 
 
операцій, існує значний запит на системи, які дозволяють студентам 
експериментувати з різними методами без необхідності встановлювати громіздке 
програмне забезпечення або писати складний код. Веб-орієнтований підхід вирішує 
цю проблему, оскільки дозволяє використовувати систему безпосередньо у браузері, 
з будь-якого пристрою та без додаткових налаштувань. Це робить застосунок не лише 
технологічно зручним, але й практичним у освітній діяльності, при дистанційному 
навчанні та наукових дослідженнях. 
Отже, обрана тема кваліфікаційної роботи є актуальною як з наукового, так і з 
прикладного погляду, оскільки поєднує сучасні методи управління проєктами, 
глибокі математичні аспекти теорії і методів оптимізації та інструменти розробки веб-
застосунків. 
Метою кваліфікаційної роботи є розробка та обґрунтування концепції 
управління проєктом створення веб-орієнтованого застосунку для розв’язування 
оптимізаційних задач чисельними методами, що поєднує дослідження теоретичних 
аспектів управління ІТ-проєктами з практичною реалізацією програмного продуку. 
Завдання кваліфікаційної роботи магістра, які необхідно вирішити для 
досягнення поставленої мети: 
– виконати огляд чисельних методів оптимізації, сфер їх застосування та 
програмних засобів для їх реалізації; 
– провести аналіз предметної області та визначити структуру майбутнього 
продукту; 
– сформувати концепцію веб-застосунку та обґрунтувати вибір архітектурних 
рішень; 
– розробити структури та плани управління проєктом; 
– виконати планування часових, ресурсних та вартісних параметрів за 
допомогою MS Project; 
– розробити базу даних та модель даних застосунку; 
– реалізувати веб-орієнтований застосунок з використанням сучасних 
інформаційних технологій та мов програмування; 
12 
 
– провести тестування функціональності, продуктивності та математичної 
коректності розробленого веб-застосунку. 
Об’єктом дослідження є процеси управління проєктом створення веб-
орієнтованого застосунку. 
Предметом дослідження є проєкт створення веб-орієнтованого застосунку для 
розв’язування оптимізаційних задач чисельними методами. 
Методи дослідження включають системний аналіз; метод декомпозиції; 
сітьове планування; методи управління ризиками; теорію ймовірностей; метод 
бюджетування «знизу нагору»; прийоми тестування програмного забезпечення; а 
також програмно-технологічні підходи до розробки веб-орієнтованих систем із 
використанням мов програмування Java, Python і JavaScript. 
Узагальнюючи вищезазначене, можна стверджувати, що дана кваліфікаційна 
робота спрямована на розв’язання актуальної науково-прикладної задачі – створення 
сучасного веб-орієнтованого застосунку для розв’язання оптимізаційних задач,   
дослідження чисельних методів оптимізації та забезпечення методологічно 
коректного процесу управління ІТ-проєктом.  
Отримані в роботі результати мають теоретичну і практичну цінність та можуть 
бути використані в подальших дослідженнях або як основа для розвитку відповідних 
інформаційних систем. 
  
13 
 
1 АНАЛІЗ ПЕРЕДУМОВ РЕАЛІЗАЦІЇ ПРОЄКТУ 
 
1.1 Актуальність проєкту з розробки веб-орієнтованого застосунку для 
розв’язання задач оптимізації 
У сучасних умовах цифрової трансформації суспільства зростає потреба в 
інтелектуальних програмних інструментах, здатних автоматизувати складні процеси 
аналізу, прогнозування та прийняття рішень. Одним із ключових напрямів розвитку 
прикладної інформатики є чисельна оптимізація, що забезпечує пошук найкращих 
рішень для задач різної природи – технічних, економічних, логістичних, наукових [1]. 
Підвищення обсягів даних, зростання складності моделей і швидкий розвиток 
технологій хмарних обчислень стимулюють появу нового покоління веб-
орієнтованих застосунків, які дозволяють виконувати оптимізаційні розрахунки без 
необхідності встановлення спеціального програмного забезпечення. Такий підхід 
відповідає глобальним тенденціям у створенні універсальних, доступних і 
масштабованих інструментів для наукових та інженерних обчислень [2]. 
Наукові публікації останніх років підкреслюють зростаючу роль інтеграції 
методів оптимізації у веб- та хмарні середовища. У працях [3], [4] розглядаються 
підходи до реалізації оптимізаційних алгоритмів у середовищах з розподіленими 
обчисленнями, що дозволяє підвищити ефективність розв'язання задач великої 
розмірності. Такі рішення відкривають можливості для спільного використання 
ресурсів, підвищення продуктивності та зручності доступу до обчислювальних 
сервісів через Інтернет. 
Водночас зростає потреба у створенні зручних інструментів для різних 
категорій користувачів – інженерів, дослідників, викладачів та студентів, які 
працюють із задачами оптимізації. Для них актуальними залишаються проблеми 
відсутності єдиних інтегрованих рішень, що поєднують точність математичних 
методів, доступність через браузер і можливість швидкої візуалізації результатів. 
Розробка веб-орієнтованого застосунку, який поєднує чисельні методи з сучасними 
14 
 
веб-технологіями, здатна суттєво спростити процес навчання, досліджень та 
впровадження оптимізаційних підходів у практику [5]. 
Таким чином, актуальність проєкту полягає у необхідності створення відкритої, 
гнучкої та ефективної платформи для розв’язання задач оптимізації в інтерактивному 
веб-середовищі. Такий підхід відповідає сучасним вимогам до цифрових науково-
освітніх інструментів і сприятиме підвищенню ефективності аналітичної роботи та 
освітнього процесу. 
1.2 Системний аналіз предметної області та об’єкту дослідження  
Розробка веб-орієнтованого застосунку для розв’язання задач оптимізації 
потребує глибокого розуміння як самої предметної області оптимізації, так і 
технічного контексту, в якому такий застосунок функціонуватиме. Системний аналіз 
дозволяє розглянути об’єкт дослідження як комплексну структуру, що поєднує 
математичні, програмні, обчислювальні та користувацькі аспекти. Його проведення є 
необхідним етапом для формування вимог, визначення архітектурних рішень і 
забезпечення ефективності майбутнього продукту. 
Об’єктом дослідження у цьому проєкті є процес розв’язання задач оптимізації 
за допомогою веб-застосунків, а предметом дослдіження – методи, засоби та 
технології, які забезпечують виконання оптимізаційних алгоритмів у середовищі 
мережевих обчислень.  
Основна мета аналізу полягає у визначенні системних властивостей предметної 
області, ключових взаємозв’язків між компонентами та факторів, що впливають на 
ефективність реалізації програмного продукту. 
Сфера чисельної оптимізації охоплює широкий спектр методів, які 
використовуються для мінімізації або максимізації певної цільової функції при 
наявності обмежень. Такі методи застосовуються у технічному проєктуванні, 
економічному моделюванні, машинному навчанні, транспортній логістиці, 
енергетиці та інших напрямках. Задачі оптимізації можуть бути класифіковані за 
кількома ознаками: типом цільової функції (лінійна, нелінійна, стохастична), 
15 
 
наявністю обмежень, кількістю змінних, способом пошуку рішення (градієнтні, 
евристичні, комбінаторні) [1]. 
Важливим аспектом аналізу є ідентифікація основних груп користувачів, для 
яких призначений застосунок, що розробляється. До них належать інженери, що 
виконують техніко-економічні розрахунки; науковці, які досліджують поведінку 
моделей оптимізації; викладачі та студенти, які використовують подібні системи для 
навчальних експериментів. Для кожної групи користувачів визначаються власні 
вимоги до функціональності застосунку. Інженери очікують від програмного 
продукту високої точності розрахунків і можливості інтеграції з зовнішніми 
системами, дослідники потребують гнучкості у налаштуванні параметрів алгоритмів, 
а користувачі зі сфери освіти – зрозумілого інтерфейсу і візуалізації результатів. 
У контексті сучасного розвитку інформаційних технологій системи, 
орієнтовані на оптимізацію, повинні враховувати вимоги до масштабованості, 
розподіленості обчислень і забезпечення доступу через браузер. Використання веб-
технологій дозволяє створювати інтерактивне середовище, у якому користувач може 
формулювати задачу, вибирати метод розв’язання, отримувати числові результати та 
аналізувати поведінку алгоритму у графічному вигляді. Це забезпечує більшу 
зручність і швидкість порівняно з традиційними настільними програмами [2]. 
Предметна область веб-орієнтованих оптимізаційних систем охоплює низку 
взаємопов’язаних компонентів: 
 математичне ядро, що реалізує алгоритми оптимізації (градієнтні методи, 
методи рою частинок, генетичні алгоритми тощо); 
 серверна частина, відповідальна за обчислення, обробку запитів і взаємодію 
з базами даних; 
 клієнтська частина, яка забезпечує взаємодію з користувачем і візуалізацію 
результатів; 
 комунікаційний інтерфейс (API), що дозволяє інтегрувати застосунок з 
іншими системами та сервісами; 
16 
 
 інфраструктурні компоненти, які забезпечують збереження даних, 
масштабування і захист інформації. 
З точки зору системного аналізу, ці елементи утворюють багаторівневу 
структуру, де кожен рівень має власні функції та вимоги. На найвищому рівні 
знаходиться користувач, який взаємодіє з інтерфейсом веб-застосунку. Нижчі рівні 
відповідають за обробку даних, виконання обчислень і підтримку алгоритмів 
оптимізації. Взаємодія між цими рівнями має бути побудована на принципах 
модульності, розширюваності та незалежності компонентів. 
З огляду на динамічний розвиток технологій, важливою складовою аналізу 
предметної області є оцінка тенденцій розвитку веб-систем у науково-інженерній 
сфері. Серед актуальних напрямів можна виділити [6]: 
 перехід від монолітних до мікросервісних архітектур; 
 використання контейнеризації (Docker, Kubernetes) для підвищення 
гнучкості розгортання; 
 інтеграцію з хмарними платформами для забезпечення високої 
продуктивності обчислень; 
 розвиток систем інтерактивної візуалізації результатів оптимізації в 
реальному часі. 
Крім технологічних аспектів, аналіз предметної області враховує 
методологічну складову. Сучасні підходи до оптимізації базуються не лише на 
класичних методах математичного аналізу, а й на евристичних і метаевристичних 
моделях, що дозволяють ефективно вирішувати задачі з великою кількістю змінних 
та складними обмеженнями. Їх реалізація у веб-середовищі потребує забезпечення 
балансування між швидкодією, точністю та ресурсною ефективністю [7]. 
Важливим підсумком системного аналізу є визначення ключових вимог до 
майбутньої системи, що охоплюють, зокрема: 
 забезпечення можливості розв’язання широкого класу задач оптимізації; 
 надання гнучкого інтерфейсу для опису цільової функції, обмежень і 
початкових умов; 
17 
 
 підтримку можливості розширення переліку доступних методів оптимізації; 
 візуалізацію процесу пошуку та результатів у зручній формі; 
 забезпечення доступності через браузер без додаткової установки 
програмного забезпечення; 
 надійність і масштабованість у багатокористувацькому середовищі. 
Таким чином, системний аналіз предметної області і об’єкта дослідження дає 
змогу сформувати цілісне уявлення про структуру, вимоги та функціональні 
особливості майбутнього веб-орієнтованого застосунку для розв’язання задач 
оптимізації. Проведений аналіз створює основу для подальшої постановки проблеми, 
вибору методів і засобів її вирішення, що будуть розглянуті у наступних підрозділах. 
1.3 Постановка та обґрунтування проблеми 
Проведений системний аналіз предметної області показав, що сучасні підходи 
до розв’язання задач оптимізації мають низку обмежень, пов’язаних як із технічними, 
так і з організаційними аспектами їх використання. Зокрема, існуючі програмні 
продукти для оптимізації зазвичай мають закриту архітектуру, складну інсталяцію, 
вимоги до ліцензій та значні апаратні ресурси. Це обмежує доступність 
оптимізаційних засобів для широкого кола користувачів, особливо у навчальних, 
дослідницьких та малих інженерних середовищах. 
Проблема полягає у створенні гнучкого, доступного та масштабованого 
інструменту, який забезпечить розв’язання задач оптимізації різного типу без потреби 
в спеціальному програмному забезпеченні або високопродуктивному обладнанні. 
Традиційні настільні системи, такі як MATLAB, GAMS, R або Python-бібліотеки 
(SciPy, NumPy), мають безсумнівну точність і гнучкість, однак їх використання 
потребує знань програмування, налаштування середовищ та значного часу на 
підготовку даних і обчислень. Натомість веб-орієнтовані рішення дозволяють 
винести складну обчислювальну частину на сервер, забезпечуючи легкий доступ до 
інструментів через браузер [1], [2]. 
18 
 
Ключова проблема, що визначає необхідність реалізації цього проєкту, полягає 
у відсутності універсальної платформи, яка поєднувала б у собі точність чисельних 
методів оптимізації, зручність веб-доступу та можливість візуалізації результатів у 
реальному часі.  
У наявних рішеннях спостерігаються такі недоліки: 
 відсутність інтегрованого інтерфейсу для задання та аналізу задач різного 
типу; 
 недостатня підтримка сучасних метаевристичних методів, таких як PSO 
[3], [7]; 
 відсутність можливості розподілених обчислень або інтеграції з хмарними 
середовищами; 
 складність адаптації інтерфейсу під потреби користувачів з різним рівнем 
підготовки; 
 відсутність відкритої архітектури, що дозволяє розширювати функціонал 
новими методами чи сервісами. 
Крім технічних обмежень, наявна також методологічна проблема – розрив між 
теоретичними моделями оптимізації, які розглядаються у науковій літературі, та 
практичними інструментами, що застосовуються у прикладних розрахунках. Часто 
результати теоретичних досліджень залишаються недоступними для широкого 
використання через відсутність відповідного програмного середовища.  
Отже, постає завдання створення системи, яка зможе реалізувати 
найпоширеніші методи оптимізації в інтерактивному, зрозумілому та відкритому 
середовищі. 
Обґрунтування актуальності проблеми також пов’язане зі зростанням ролі 
хмарних технологій у наукових та освітніх процесах. Модель надання 
обчислювальних ресурсів як сервісу (Software as a Service) істотно спрощує доступ до 
складних обчислень, забезпечуючи гнучкий розподіл ресурсів відповідно до 
поточного рівня активності користувачів на ресурсі [2], [4]. Це відкриває можливість 
створення масштабованої системи, у якій складні оптимізаційні алгоритми 
19 
 
виконуються на серверній стороні, а користувачі взаємодіють із нею через веб-
інтерфейс. 
У процесі формулювання проблеми важливо також визначити критерії її 
вирішення. Основними критеріями ефективності майбутнього продукту є: 
 забезпечення коректної реалізації базових методів оптимізації, як класичних, 
так і метаевристичних; 
 підтримка віддаленого доступу через браузер із мінімальними вимогами до 
клієнтської частини; 
 можливість інтерактивної взаємодії користувача із системою: зручність 
формулювання оптимізаційної задачі, вибір методу оптимізації для її розв’язання та 
введення значень його параметрів, простота запуску алгоритмів, збереження 
результатів та їх візуалізація; 
 забезпечення розширюваності системи шляхом додавання нових методів 
оптимізації або модулів; 
 підтримка інтеграції системии з іншими сервісами через API. 
Враховуючі зазначене, постановка проблеми може бути сформульована так: 
існує необхідність у створенні веб-орієнтованого застосунку, який забезпечить 
розв’язання задач оптимізації різного рівня складності в інтерактивному середовищі 
з підтримкою популярних чисельних методів оптимізації, метаевристичних 
алгоритмів і можливістю масштабування через хмарну інфраструктуру. 
Розв’язання цієї проблеми дозволить усунути існуючі бар’єри між теорією 
оптимізації та практикою застосування чисельних методів оптимізації, забезпечити 
доступність сучасних методів для освітніх і дослідницьких потреб, а також створити 
універсальну основу для подальшої розробки інтелектуальних аналітичних веб-
систем. Це стане важливим кроком у напрямі цифровізації наукових обчислень та 
популяризації інженерних інструментів нового покоління [5], [6]. 
 
 
 
20 
 
1.4 Методи та засоби вирішення проблеми 
Розв’язання проблеми, сформульованої в попередньому підрозділі, можливе 
шляхом ралізації проєкту створення веб-орієнтованого застосунку, що поєднує у собі 
ефективні математичні методи оптимізації, сучасні технології програмної інженерії 
та гнучку архітектуру. Метою проєкту є створення системи, здатної виконувати точні, 
масштабовані обчислення з розв’язання задач оптимізації різного типу в зручному, 
інтерактивному веб-середовищі. 
Архітектура майбутнього рішення передбачає багаторівневий підхід, у якому 
кожен компонент відповідає за окремий аспект роботи: взаємодію з користувачем, 
обчислення, збереження даних, безпеку та інтеграцію. 
1.4.1 Математичні методи оптимізації 
Базові методи оптимізації, що реалізуються у веб-застосунку, поділяються на 
кілька груп, що охоплюють широкий спектр задач оптимізації – від одномірних до 
багатовимірних, від опуклих до неопуклих, від локальних до глобальних пошуків: 
1. Методи одновимірної оптимізації: 
1.1. Метод бісекції (дихотомії); 
1.2. Метод золотого перерізу; 
1.3. Метод Фібоначчі; 
1.4. Метод парабол; 
2. Методи безумовної оптимізації: 
2.1. Метод найшвидшого спуску; 
2.2. Яристий метод; 
2.3. Метод спряжених градієнтів; 
2.4. Метод Ньютона; 
2.5. Метод Нелдера–Міда (симплексний метод); 
3. Методи умовної оптимізації: 
3.1. Метод проєкції градієнта; 
21 
 
3.2. Метод умовного градієнта; 
3.3. Методи штрафних функцій; 
4. Методи глобальної оптимізації: 
4.1. PSO (Particle Swarm Optimization) – стандартна та класична реалізації. 
4.2. Адаптивні модифікації алгоритму PSO (APSO). 
Система також має реалізовувати набір еталонних тестових функцій 
оптимізації, що дасть користувачам можливість здійснювати порівняння 
продуктивності різних методів за критеріями точності, збіжності та стабільності 
результатів (див., наприклад, [8]).  
1.4.2 Програмно-технологічна архітектура системи 
Архітектура веб-застосунку буде побудована за принципом мікросервісної 
взаємодії між компонентами, де кожен елемент відповідає за конкретний аспект 
роботи системи [6]. Такий підхід забезпечує масштабованість, простоту оновлення та 
можливість незалежного тестування окремих модулів системи: 
1. Серверна частина для авторизації та управління даними: 
 використовує мову Java з фреймворком Spring Boot, що забезпечує надійну 
реалізацію RESTful API, роботу з базою даних та управління 
користувачами; 
 реалізує безпеку за допомогою Spring Security, підтримку HTTPS-
протоколу та автентифікацію за JWT токенами; 
 використовує СКБД PostgreSQL для зберігання інформації про 
користувачів; 
2. Обчислювальний модуль: 
 відповідає за реалізацію математичних алгоритмів, виконання обчислень і 
формування результатів на базі мови Python; 
 для чисельних розрахунків застосовує різноманітні бібліотеки Python та 
спеціальні утиліти, що реалізовані для проєкту; 
22 
 
 використовує фреймворк FastAPI для забезпечення високої швидкодію, 
асинхронної обробки запитів та легкої інтеграції з Java-сервером через 
HTTP-запити; 
 обчислювальний модуль може бути розгорнутий як окремий сервіс, що 
підвищує стабільність і гнучкість системи; 
3. Клієнтська частина (JavaScript з фреймворком Angular): 
 використовує JavaScript з фреймворком Angular для побудови динамічного 
інтерфейсу користувача, що підтримує інтерактивну взаємодію в 
реальному часі; 
 інтерфейс дозволяє користувачам задавати функції, обмеження, параметри 
алгоритмів та відображати результати у вигляді графіків і 3D-візуалізацій; 
 використовує бібліотеку Plotly.js для побудови графіків, що підтримує 
інтерактивне масштабування, обертання та аналіз точок результатів; 
 дозволяє експортувати результати обчислень у вигляді JSON-файлу для 
можливості повторного виведення результатів та графіків за допомогою 
імпортування без виконання повторних обчислень. 
4. Контейнеризація та CI/CD: 
 усі сервіси системи контейнеризуються за допомогою платформи Docker; 
 розгортання та оновлення відбувається через CI/CD-конвеєр, що спрощує 
розгортання на будь-якому серверу або у віртуальному середовищі; 
 система не залежить від конкретної хмарної платформи і може бути 
розгорнута у внутрішньому корпоративному середовищі чи на 
університетському сервері. 
 
1.4.3 Безпека, масштабованість і розширюваність 
Безпека системи має бути реалізована як комплексна багаторівнева підсистема, 
що охоплює усі компоненти архітектури – від клієнтського інтерфейсу до 
обчислювальних сервісів: 
1. Механізми автентифікації та авторизації: 
23 
 
 використання JWT (JSON Web Token) як основного механізму 
автентифікації та контролю доступу; 
 усі сервіси реалізують перевірку дійсності токенів за допомогою JWK 
(JSON Web Key), який вони отримають із централізованого сервісу 
безпеки; 
 сервіс безпеки відповідатиме за генерацію, оновлення та поширення 
відкритих ключів JWK, що гарантує узгодженість і надійність перевірки 
токенів у розподіленому середовищі; 
 крім стандартної реєстрації користувача, має бути передбачено можливість 
автентифікації через Google OAuth 2.0, після чого користувачу 
автоматично видасться JWT для подальшої роботи з системою; 
2. Захист даних і комунікацій: 
 взаємодія між клієнтською частиною, сервером і обчислювальними 
модулями здійснюється виключно через HTTPS, що запобігає 
перехопленню або модифікації даних у процесі передавання; 
 дані користувачів зберігаються у PostgreSQL у зашифрованому вигляді із 
застосуванням сучасних криптографічних алгоритмів; 
 контроль доступу до ресурсів реалізований за ролями, що дозволяє чітко 
розмежовувати права користувачів (гість, звичайний користувач, 
продвинутий користувач, адміністратор); 
3. Масштабованість системи: 
 завдяки контейнеризації всіх компонентів система може бути легко 
масштабована горизонтально шляхом додавання нових контейнерів із 
потрібними сервісами; 
 обчислювальні модулі мають можливість запускатися у кількох 
екземплярах для паралельного виконання незалежних задач оптимізації, 
що підвищує продуктивність при великій кількості користувачів; 
 механізм балансування навантаження між контейнерами забезпечує 
стабільність роботи навіть при пікових навантаженнях; 
24 
 
4. Розширюваність та гнучкість інтеграції: 
 модульна структура системи дозволяє легко додавати нові алгоритми 
оптимізації чи тестові функції, не змінюючи ядро; 
 сервіс безпеки спроєктований так, щоб у майбутньому можна було 
інтегрувати інші зовнішні провайдери автентифікації (наприклад, Apple, 
Microsoft, університетські SSO). 
Отже, безпекова архітектура системи, побудована на основі JWT і 
централізованого сервісу JWK, у поєднанні з контейнеризацією та модульним 
дизайном забезпечує високу стійкість, масштабованість і розширюваність системи в 
довгостроковій перспективі. 
1.5 Аналіз ринку програмного забезпечення розв’язання задач оптимізації 
Сучасний ринок засобів для розв’язання задач оптимізації характеризується 
високим рівнем насиченості, проте більшість наявних рішень або орієнтовані на 
комерційне використання з обмеженим доступом до внутрішніх алгоритмів, або 
вимагають значних технічних знань для налаштування та інтеграції. Тому розробка 
відкритого веб-орієнтованого застосунку, що поєднує зручність інтерфейсу з 
широким спектром реалізованих методів оптимізації, має високу актуальність. 
До популярних засобів розв’язання задач оптимізації можна віднести: 
 MATLAB Optimization Toolbox [9] – один із найпоширеніших комерційних 
продуктів для наукових та інженерних обчислень, що містить широкий набір 
алгоритмів оптимізації: градієнтні, еволюційні, методи умовної оптимізації 
тощо. Перевагою є інтеграція з іншими інструментами MATLAB, однак його 
вартість і закритість вихідного коду роблять його недоступним для багатьох 
навчальних або дослідницьких установ. Окремої уваги заслуговує MATLAB 
Online, який забезпечує роботу без локальної інсталяції через веб-середовище 
і зберігає сумісність із традиційним середовищем MATLAB. Проте навіть у 
цьому варіанті користувач обмежений у гнучкості налаштувань та зміні 
25 
 
внутрішніх алгоритмів, а доступ можливий лише за умови наявності платної, 
або ж тимчасової тестової підписки; 
 Gurobi Optimizer [10] – високопродуктивний комерційний пакет для 
розв’язання задач лінійного, квадратичного та змішаного цілочислового 
програмування. Має хмарну платформу, API для різних мов програмування 
та добре документований інтерфейс. Основним недоліком є висока 
ліцензійна вартість і орієнтація виключно на певні класи задач; 
 SciPy [11] – модуль з відкритим кодом, який забезпечує реалізацію базових 
методів оптимізації: градієнтних, безградієнтних, одновимірних і 
багатовимірних. Хоча SciPy має широку спільноту користувачів, він не надає 
готового веб-інтерфейсу, а інтеграція у веб-середовище потребує додаткових 
зусиль з боку розробників; 
 Google OR-Tools [12] – бібліотека з відкритим кодом для оптимізаційних 
задач (лінійне, цілочислове, маршрутизаційне програмування), що підтримує 
інтеграцію з Python, C++, Java. Сильна сторона – ефективність та активна 
підтримка, проте продукт орієнтований переважно на прикладні задачі 
логістики, а не на універсальні дослідницькі експерименти; 
 Wolfram Mathematica [13] – потужне середовище для аналітичних і чисельних 
розрахунків, що має модулі для розв’язання задач оптимізації. Незважаючи 
на широкі можливості, програмний комплекс вимагає високої вартості 
ліцензії та значних апаратних ресурсів, що обмежує його застосування у 
навчальних цілях. Додатковим рішенням є Wolfram|Alpha – онлайн-
платформа, орієнтована на швидкі обчислення та демонстраційні 
експерименти. Вона надає базові інструменти оптимізації, але не дозволяє 
проводити повноцінне моделювання складних багатовимірних задач; 
 GAMS (General Algebraic Modeling System) [14] – система алгебраїчного 
моделювання, яка допомагає моделювати складні завдання оптимізації та 
математичного програмування. Використовується в економіці, інженерії та 
наукових дослідженнях для планування, аналізу та моделювання бізнес-
26 
 
процесів. Дозволяє моделювати завдання за допомогою простої алгебраїчної 
мови та поєднувати різні розв'язувачі оптимізації; 
 R [15] – мова програмування та середовище для статистичних обчислень, яке 
має велику кількість пакетів для розв’язання задач оптимізації, таких як 
optim, nloptr, ROI (R Optimization Infrastructure) та інші. R забезпечує 
гнучкість у побудові експериментів і візуалізації результатів, проте не має 
стандартного веб-інтерфейсу. Для інтеграції з веб-середовищами зазвичай 
використовуються додаткові фреймворки, що потребує глибших знань 
програмування та адміністрування серверів. 
Аналіз наведених рішень свідчить, що більшість інструментів не забезпечують: 
 доступного веб-інтерфейсу для проведення експериментів у браузері без 
інсталяції; 
 єдиного середовища, де поєднані різні методи оптимізації; 
 можливості масштабування обчислень на серверному рівні; 
 відкритої архітектури з можливістю простого розширення бібліотеки 
алгоритмів. 
Ці обмеження створюють передумови для формування нового підходу до 
побудови веб-орієнтованої системи розв’язання задач оптимізації, яка б поєднувала 
зручність доступу, масштабованість, прозорість обчислень і розширюваність. 
Веб-застосунок, що розробляється, має зайняти нішу між професійними 
комерційними пакетами та обмеженими бібліотеками з відкритим кодом. Основні 
конкурентні переваги такої системи: 
 веб-доступність – можливість використання у будь-який час з будь-якого 
пристрою без інсталяції; 
 гнучка архітектура – поділ на окремі сервіси для безпеки, обчислень, 
управління користувачами та візуалізації результатів; 
 масштабованість через Docker і CI/CD – можливість розгортання на будь-
якому сервері без прив’язки до хмарних провайдерів; 
27 
 
 зручний інтерфейс – реалізація інтуїтивно зрозумілої взаємодії користувача з 
основними модулями системи. 
Цільовими користувачами веб-застосунку є: 
 дослідники та науковці, що потребують доступного інструменту для 
моделювання і перевірки оптимізаційних алгоритмів; 
 інженери, які застосовують оптимізаційні підходи в задачах керування, 
моделювання або проєктування; 
 студенти та викладачі, для яких платформа стане навчальним інструментом 
для вивчення чисельних методів оптимізації; 
 розробники, зацікавлені у створенні власних модулів оптимізації на базі 
відкритого API. 
Отже, наявні рішення лише частково задовольняють потреби різних груп 
користувачів. Запропонований проєкт заповнює цю прогалину, надаючи відкриту, 
інтерактивну та масштабовану платформу, орієнтовану на сучасні принципи веб-
розробки та розподілених обчислень. 
Висновки до розділу 1 
У межах розділу було проведено системний аналіз передумов реалізації 
проєкту розробки веб-орієнтованого застосунку для розв’язання задач оптимізації. На 
основі огляду сучасних тенденцій розвитку цифрових інструментів і веб-технологій 
обґрунтовано високу актуальність створення інтегрованого сервісу, що поєднує 
можливості чисельної оптимізації, зручність доступу через браузер і масштабованість 
серверних обчислень. 
Системний аналіз предметної області показав, що проблематика оптимізації 
охоплює широкий спектр задач – від одновимірних до багатовимірних, від  
безумовних до умовних, від локальних до глобальних. Водночас, актуальною 
залишається потреба в зручному програмному середовищі, де можна проводити 
експерименти, порівнювати результати різних методів, візуалізувати одержані 
результати та автоматизувати обчислення без складного налаштування. 
28 
 
Встановлено, що розвиток веб-інфраструктури, поширення контейнеризації, 
мікросервісних архітектур і хмарних парадигм створюють технічні передумови для 
побудови універсальних систем обчислень. Чисельні методи оптимізації, описані, 
зокрема, у працях [1–3, 5, 7, 16], стали фундаментом для реалізації ефективних 
алгоритмів у цифровому середовищі. 
У підрозділі 1.3 з постановки та обґрунтування проблеми визначено ключові 
обмеження сучасних підходів: складність у використанні, відсутність єдиного 
інтерактивного середовища, висока вартість комерційних продуктів та обмеженість у 
розширюваності відкритих бібліотек. Це обґрунтовує необхідність розробки нового 
інструменту, орієнтованого на інтеграцію сучасних методів оптимізації у веб-
середовище. 
Запропоновані засоби вирішення проблеми ґрунтуються на використанні Java з 
фреймворком Spring для серверної логіки, PostgreSQL для зберігання даних 
користувачів, Python з фреймворком FastAPI для реалізації математичних бібліотек, 
а також Angular для створення клієнтського інтерфейсу. Інтеграція цих технологій 
забезпечує ефективний розподіл навантаження, модульність системи та можливість 
масштабування. Безпека реалізується через JWT-токени з валідацією за JWK, 
централізований сервіс безпеки та підтримку автентифікації через Google, що 
відповідає сучасним вимогам до захисту даних і контролю доступу. 
Проведений аналіз ринку програмного забезпечення для розв’язання задач 
оптимізації продемонстрував, що наявні системи (MATLAB, Gurobi, OR-Tools, SciPy, 
Wolfram Mathematica, GAMS, R) або є комерційними, або мають обмежену 
інтерактивність і не пропонують комплексного веб-рішення. Тому запропонований 
проєкт займає нішу між професійними й академічними інструментами, забезпечуючи 
поєднання доступності, гнучкості та функціональної повноти. 
У результаті можна зробити висновок, що реалізація веб-орієнтованого 
застосунку для розв’язання задач оптимізації є технічно доцільною, науково 
обґрунтованою та відповідає сучасним тенденціям розвитку цифрових технологій. 
Проєкт має потенціал стати зручним і потужним інструментом для дослідників, 
29 
 
інженерів, викладачів і студентів, сприяючи популяризації чисельних методів 
оптимізації та підвищенню ефективності прикладних обчислювальних процесів. 
  
30 
 
2 РОЗРОБКА КОНЦЕПЦІЇ ПРОЄКТУ 
2.1 Життєвий цикл проєкту  
Життєвий цикл проєкту визначає послідовність етапів, через які проходить 
система від моменту ідеї до її впровадження та подальшого вдосконалення. Основна 
концепція розвитку даного проєкту побудована на Agile Scrumban [17] – адаптивній 
гібридній методології, що об’єднує найкращі практики Scrum і Kanban. 
Життєвий цикл ІТ-проєкту з розробки веб-застосунку поділено на чотири 
основні етапи: ініціація, планування, розробка і впровадження (Рис. 2.1). 
 
Рисунок 2.1 – Життєвий цикл проєкту 
Кожен етап має визначені цілі, результати, артефакти та виконавців [18]: 
1. Ініціація. На цьому етапі відбувається формулювання ідеї проєкту, 
визначення його мети, місії, обґрунтування доцільності створення системи. 
Визначаються ключові стейкхолдери, проводиться аналіз предметної 
області, формується бачення майбутнього продукту. 
Основні результати етапу: 
 визначена потреба в створенні веб-платформи для розв’язання задач 
оптимізації; 
 сформована команда розробки ІТ-проєкту та розподілені ролі кожного 
учасника проєкту; 
 підготовлено початкову технічну специфікацію; 
 оцінено ризики і попередні ресурси. 
2. Планування. Метою етапу є деталізація вимог до ІТ-проєкту, постановка 
SMART-цілей, створення дорожньої карти, плану розробки та тестування. 
31 
 
Також обираються інструменти, технології, архітектурний підхід і засоби 
CI/CD. 
Основні результати етапу: 
 створено структуру ІТ-проєкту з урахуванням ролей і відповідальностей; 
 визначено строки реалізації основних завдань ІТ-проєкту; 
 обрано стандарти безпеки; 
 розроблено план управління ризиками ІТ-проєкту; 
 узгоджено критерії реалізації функціональних модулів. 
3. Розробка (реалізація). На цьому етапі виконується безпосередня реалізація 
бекенд-, фронтенд- та обчислювальних компонентів веб-застосунку. 
Здійснюється інтеграція сервісів, впровадження системи безпеки, створення 
UI та API-шлюзу, а також налаштування інфраструктури контейнеризації. 
Основні результати етапу: 
 реалізовані модулі фронтенд та бекенд частини; 
 реалізовано взаємодію між модулями; 
 налагоджено безпеку на основі обраних стандіртів; 
 проведено базові інтеграційні тести; 
 реалізовано CI/CD конвеєр для автоматичного розгортання. 
4. Впровадження. Етап передбачає тестування веб-застосунку, виправлення 
виявлених недоліків, підготовку користувацької документації та навчальних 
матеріалів. Після розгортання системи – моніторинг її стану та збір 
аналітики. 
Основні результати етапу: 
 завершене функціональне, навантажувальне й UX-тестування; 
 створено інструкції користувача; 
 розгорнуто стабільну версію веб-застосунку; 
 налагоджено зворотний зв’язок для подальших покращень веб-
застосунку. 
32 
 
Ключові віхи (milestones) визначають контрольні точки розвитку ІТ-проєкту, 
які дозволяють оцінити його прогрес і приймати рішення щодо переходу до 
наступних етапів реалізації ІТ-проєкту (Таб. 2.1). 
Таблиця 2.1 – Ключові віхи ІТ-проєкту 
Орієнтовна дата 
№ Віха Короткий опис 
завершення 
Формулювання концепції, постановка 
1 Ініціація 01.09.2025 
задачі, створення команди 
Формування технічної документації, 
2 Планування 19.10.2025 
структури ІТ-проєкту, планів спринтів 
Реалізація обчислювального сервісу та 
3 Розробка ядра 01.11.2025 
базових API 
Реалізація Впровадження авторизації через JWT і 
4 01.11.2025 
безпеки JWK 
Створення інтерфейсу користувача та 
5 Розробка UI 01.11.2025 
інтеграція з бекендом 
Налагодження Впровадження автоматизації збірки, 
6 07.11.2025 
CI/CD тестування та розгортання 
Повне тестування, підготовка технчної 
Завершальне 
7 документації та підготовка до запуску 21.11.2025 
тестування 
системи 
Розгортання стабільної версії веб-
8 Запуск системи 28.11.2025 
застосунку та збір відгуків 
 
Для реалізації проєкту обрано методологію Agile Scrumban, яка поєднує гнучке 
планування Scrum (Рис. 2.2) із візуальною адаптивністю Kanban (Рис. 2.3). 
33 
 
 
Рисунок 2.2 – Життєвий цикл спринту в Scrum [19] 
 
Рисунок 2.3 – Приклад Kanban-дошки для управління завданнями проєкту 
Такий підхід є ефективним для невеликої команди розробників ІТ-проєкту і 
дозволяє досягти балансу між дисципліною спринтів і безперервністю потоку задач. 
Основні риси застосованої методології: 
 використання коротких ітерацій (спринтів) тривалістю 1-2 тижні; 
 ведення Kanban-дошки, яка відображає статус завдань (To Do, In Progress, 
Review, Done); 
34 
 
 визначення пріоритетів на початку кожного спринту та огляд результатів 
після його завершення; 
 щотижневі stand-up зустрічі для синхронізації команди; 
 code review як обов’язковий елемент контролю якості; 
 гнучке додавання задач до поточного спринту у разі критичних змін. 
Таке поєднання забезпечує гнучкість адаптації до нових вимог, сталість 
процесів розробки та прозорість управління ІТ-проєктом. Методологія сприяє 
ефективній комунікації між членами команди, забезпечує постійний зворотний 
зв’язок і дозволяє швидко реагувати на зміни в специфікаціях. 
2.2 Ідентифікація зацікавлених сторін 
Розробка будь-якого інноваційного веб-застосунку потребує чіткої 
ідентифікації стейкхолдерів [20], оскільки саме взаємодія між ними визначає якість 
прийняття рішень, хід реалізації проєкту та ступінь досягнення запланованих цілей. 
Для даного проєкту, спрямованого на створення інтегрованого веб-сервісу для 
розв’язування оптимізаційних задач, визначено основні групи первинних та 
вторинних зацікавлених сторін, кожна з яких має власні потреби, очікування та вплив 
на результат. 
До первинних стейкхолдерів належать безпосередні учасники процесу 
розробки й експлуатації системи, тобто ті, хто безпосередньо впливає на технічну 
реалізацію, управління та кінцеве використання продукту. До вторинних – організації 
або групи, які опосередковано зацікавлені в результатах проєкту, підтримують його 
розвиток чи створюють умови для його функціонування. 
Первинними стейкхолдерами виступають [20]: 
 команда розробки, яка відповідає за технічну реалізацію, вибір архітектури, 
розгортання системи, тестування та інтеграцію; 
 керівник проєкту, котрий координує процеси, забезпечує відповідність цілей 
етапам реалізації, контролює ресурси та часові рамки; 
35 
 
 користувачі системи, які безпосередньо працюють із сервісом і формують 
вимоги до його функціональності, інтерфейсу та продуктивності. 
Вторинні стейкхолдери включають [20]: 
 освітні заклади, які зацікавлені у використанні платформи як навчального 
інструменту для викладання курсів з оптимізації, аналізу даних чи 
інженерних розрахунків; 
 партнери, а точніше компанії або дослідницькі групи, які можуть 
інтегрувати власні модулі, надавати зворотний зв’язок або використовувати 
результати проєкту у власних рішеннях. 
Більш детально це можна представити в вигляді таблиці 2.2. 
Таблиця 2.2 – Стейкхолдери проєкту 
Категорія Стейкхолдер Інтереси Очікування Вплив 
Успішне створення Наявність ресурсів, 
Команда 
Первинні продукту, технічна чіткі вимоги, Високий 
розробки 
якість регулярна комунікація 
Керівник Виконання в строк, Контроль прогресу, 
Первинні Високий 
проєкту відповідність ТЗ доступ до звітів 
Зручність, Інтуїтивний 
Первинні Користувачі швидкість, інтерфейс, стабільна Середній 
точність робота 
Інтеграція з LMS, 
Освітні Надійність і простота 
Вторинні популяризація Середній 
заклади впровадження 
інструменту 
Тестування та Репутація, участь у 
Вторинні Партнери Низький 
наукова валідація публікаціях 
Для візуалізації ступеня залучення стейкхолдерів рекомендовано 
використовувати матрицю впливу та інтересів (Power Interest Grid) [21] (Рис. 2.4), яка 
дозволяє визначити, які групи потребують найбільшої уваги під час планування 
комунікацій і прийняття рішень щодо управління ІТ-проєктом. 
36 
 
 
Рисунок 2.4 – Матриця впливу та інтересів стейкхолдерів проєкту 
Команда розробки є ядром проєкту. Її технічна компетентність та злагодженість 
визначають якість архітектурних рішень, стабільність бекенду, ефективність 
обчислень, коректність реалізації алгоритмів оптимізації та безпекових механізмів. 
Керівник проєкту виконує ключову координаційну функцію, від якої залежить 
узгодженість командних дій, ефективність використання ресурсів і своєчасне 
досягнення етапних цілей. Його вплив критично високий на всіх стадіях життєвого 
циклу системи. 
Користувачі системи мають прямий вплив на розвиток і подальше 
вдосконалення продукту через тестування, оцінку зручності інтерфейсу, формування 
запитів на нові функції та аналіз поведінкових даних. Їхня активність є показником 
успішності проєкту. 
37 
 
Освітні заклади забезпечують розповсюдження продукту в академічному 
середовищі, сприяють формуванню позитивного іміджу системи та її науково-
методичній апробації. Їхня участь підсилює соціальну складову проєкту. 
Партнери виступають носіями галузевої експертизи та потенційними 
джерелами інноваційного розвитку. Їхня підтримка розширює екосистему 
використання продукту й відкриває можливості для інтеграцій та спільних ініціатив. 
Отже, усі групи стейкхолдерів формують взаємопов’язану систему впливів, у 
якій ключову роль відіграють комунікація, прозорість процесів і адаптивність 
управління. Розуміння цих взаємозв’язків є основою для ефективної реалізації 
наступних етапів проєкту. 
2.3 Місія, мета, цілі та цінності проєкту 
Успішна реалізація будь-якого інноваційного цифрового рішення починається 
з чітко визначеної місії, стратегічної мети та системи конкретних цілей, які 
відображають сутність продукту, його значення для суспільства та напрям розвитку. 
Для веб-орієнтованого застосунку, призначеного для розв’язання задач оптимізації, 
ці аспекти набувають особливого значення, адже проєкт поєднує в собі математичну, 
інженерну, освітню та науково-дослідницьку складові, що вимагають системного 
підходу до формування концепції. 
Місія проєкту полягає у створенні зручного, доступного та 
високопродуктивного веб-орієнтованого середовища для проведення оптимізаційних 
обчислень, яке поєднує популярні чисельні методи, адаптивну інтерфейсну 
архітектуру та гнучку систему обчислювальних модулів. Рішення покликане надати 
студентам, дослідникам, викладачам та інженерам єдиний простір для експериментів, 
навчання й аналітичного моделювання. 
Бачення проєкту полягає в тому, щоб сформувати відкриту екосистему для 
дослідження оптимізаційних задач, де кожен користувач може не лише застосовувати 
готові методи, а й розробляти власні, інтегруючи їх у систему через API. Такий підхід 
38 
 
сприятиме поширенню культури використання обчислювальних сервісів, 
підвищенню цифрової грамотності та розвитку міждисциплінарних досліджень. 
Розробка системи базується на принципах прозорості, надійності та 
відкритості, що відповідає сучасним тенденціям цифрової трансформації освіти і 
науки. 
Метою проєкту є створення веб-застосунку, який забезпечить користувачів 
можливістю проводити обчислювальні експерименти з різними класами задач 
оптимізації (одновимірної, багатовимірної, умовної та глобальної) з використанням 
сучасних методів (градієнтних, евристичних, еволюційних тощо) і візуалізацією 
обчислювального процесу та його результатів.  
Особливу увагу при розробці веб-застосунку приділено точності обчислень, 
масштабованості архітектури та інтеграції з іншими сервісами. 
Реалізація проєкту передбачає створення комплексного середовища, що 
складається з фронтенд-інтерфейсу, бекенд-сервісів, системи керування базами даних 
та системи контейнеризації із CI/CD-підтримкою. 
Досягнення цієї мети сприятиме вирішенню таких завдань: 
 підвищення ефективності навчання дисциплін, пов’язаних з оптимізацією, 
дослідженням операцій та моделюванням; 
 сприяння більш зрозумілому використанню користувачами складних 
методів оптимізації; 
 стимулювання досліджень у галузі штучного інтелекту, обчислювальної 
математики та машинного навчання. 
Цінності, на яких ґрунтується реалізація цього проєкту, визначають його 
філософію та стратегічний підхід до розвитку: 
 відкритість: доступність результатів, прозорість структури коду, 
можливість розширення функціональності; 
 інноваційність: використання сучасних технологій для забезпечення 
безпеки, ефективності та масштабованості; 
 надійність: стабільність, відмовостійкість і безпека компонентів; 
39 
 
 освітня користь: сприяння підготовці фахівців у сфері оптимізації, 
дослідження операцій, обчислювальної математики та моделювання; 
 співпраця: формування спільноти користувачів і розробників для обміну 
досвідом і новими ідеями з метою розвитку проєкту. 
Для забезпечення більшої керованості при реалізації проєкту та можливості 
об’єктивного оцінювання його прогресу формулюються SMART-цілі, тобто 
конкретні, вимірювані, досяжні, релевантні та обмежені в часі завдання, що 
деталізують основні етапи розробки [22]: 
1. Розробка сервісу обчислень: 
 деталізація (S, Specific) – реалізувати сервіс для розв’язання 
оптимізаційних задач, що забезпечує обчислення за різними методами; 
 умови виконання (M, Measurable) – підтримка не менше ніж 10 методів 
оптимізації та забезпечення їх тестування щонайменше на 20 стандартних 
тестових функціях; 
 досяжність (A, Achievable) – за рахунок використання бібліотек мови 
Python NumPy, SciPy і власних реалізацій алгоритмів; 
 важливість (R, Relevant) – особливо для функціональності, адже цей 
сервіс є ядром системи; 
 термін виконання (T, Time-bound) – до 01.11.2025. 
2. Розробка сервісу безпеки: 
 деталізація – створити окремий мікросервіс автентифікації користувачів 
із використанням стандантів JWT та JWK [23]; 
 умови виконання – тестове покриття не менше 80% та реалізація 4-х рівнів 
ролей: Гість, Користувач, Продвинутий користувач, Адміністратор; 
 досяжність – за рахунок використання сучасних фреймворків та 
стандартів безпеки; 
 важливість – забезпечує безпечний доступ до всіх модулів системи; 
 термін виконання – до 01.11.2025. 
3. Розробка користувацького інтерфейсу: 
40 
 
 деталізація – створити веб-інтерфейс для взаємодії з backend-сервісами 
та візуалізації результатів; 
 умови виконання – реалізація 4-х ключових сторінок: головної, обчислень, 
виведення результатів та налаштувань; 
 досяжність – за рахунок використання сучасних фреймворів та бібліотек 
JavaScript для візуалізації інтерфейсу користувача та результатів 
обрахунків; 
 важливість – підвищує рівень зручності роботи для користувача та 
привабливості системи; 
 термін виконання – до 01.11.2025. 
4. Налагодження CI/CD процесів: 
 деталізація – забезпечити безперервну інтеграцію та розгортання на 
сервер із автоматичним тестуванням; 
 умови виконання – забезпечити автоматичну збірку, тестування та 
розгортання на тестове середовище при кожному оновленні коду; 
 досяжність – за рахунок використання сучасних технологій, стандартів 
CI/CD та контейнеризіції; 
 важливість – підтримує стабільність релізів та скорочує час оновлень; 
 термін виконання – до 07.11.2025. 
5. Підвищення швидкодії системи: 
 деталізація – зменшити середній час розв’язання задач оптимізації 
порівняно з базовою реалізацією системи; 
 умови виконання – проведення порівняльного тестування методів 
оптимізації на стандартних наборах тестових функцій та досягнення 
зменшення часу виконання не менше ніж на 30%; 
 досяжність – за рахунок оптимізації алгоритмів методів оптимізації, 
використання паралельних обчислень та кешування результатів; 
 важливість – ключовий показник ефективності системи; 
 термін виконання – до 14.11.2025. 
41 
 
6. Тестування та документація: 
 деталізація) – провести модульні, інтеграційні та UX-тести, а також 
підготувати технічну документацію щодо веб-застосунку; 
 умови виконання – покрити тестами 100% основних модулів та 
підготувати інструкцію користувача; 
 досяжність – за рахунок використання сучасних технологій і 
фреймворків для тестування компонентів веб-застосунків; 
 важливість – підвищує якість, стабільність і підтримуваність продукту; 
 термін виконання – до 21.11.2025. 
Отже, місія, мета та цінності проєкту формують його цілісну концепцію, 
орієнтовану на створення інструменту, що поєднує наукову точність, технічну 
досконалість і соціальну значущість. 
2.4 Структура веб-застосунку 
Функціональна структура веб-застосунку складається з трьох рівнів: 
користувацького, системного та адміністративного. Кожен із них виконує власну 
роль у взаємодії між користувачем і внутрішньою логікою системи (Рис. 2.5). 
 
Рисунок 2.5 – Функціональна структура веб-застосунку 
Розглянемо призначення рівнів функціональної структури веб-застосунку: 
1. Користувацький рівень. Цей рівень призначений для кінцевих користувачів, 
які взаємодіють із системою через веб-інтерфейс. Основні функції 
включають: реєстрацію, вхід в систему, формування задач оптимізації, 
42 
 
запуск обчислень, збереження результатів обчислень та відповідних 
графіків. Користувач має змогу обирати метод оптимізації, задавати 
параметри обчислень і отримувати чисельні результати розв’язання задач та 
їх візуальцією у формі графіків, таблиць, діаграм. 
2. Системний рівень. До цього рівня належать усі бекенд-компоненти, що 
реалізують бізнес-логіку, управління даними, виконання обчислень і 
забезпечення комунікації між сервісами. Ключову роль у ньому відіграють: 
 Сервіс обчислень – відповідає за виконання математичних обчислень, 
реалізацію методів оптимізації та обробку даних; 
 Сервіс безпеки – здійснює автентифікацію та авторизацію користувачів на 
основі стандарту JWT, виконує роль центрального сервісу безпеки за 
стандартом JWK та підтримує CRUD-операції для даних користувача, 
логіку ролей і доступів; 
 API-шлюз – контролює маршрутизацію запитів, агрегацію відповідей від 
мікросервісів і перевірку JWT перед доступом до будь-якого ресурсу. 
3. Адміністративний рівень. Використовується керівництвом проєкту або 
адміністраторами для моніторингу стану системи, управління 
користувачами, оновлення моделей та аналізу продуктивності. Включає 
панель моніторингу з інтеграцією сучасних фреймворків для збору логів і 
метрик. 
Компонентна модель веб-застосунку описує окремі компоненти програмного 
комплексу та зв’язки між ними (Рис. 2.6). 
Розглянемо призначення основних компонент веб-застосунку:  
1. Фронтенд. Забезпечує інтерактивний інтерфейс користувача, динамічне 
оновлення контенту та візуалізацію результатів обчислень за допомогою 
фреймворку Angular та JavaScript-бібліотекою для візуалізації – Plotly.js. 
Взаємодіє з бекендом через HTTP-запити. 
2. Бекенд: 
43 
 
 Сервіс безпеки: відповідає за управління користувачами, безпеку та роботу з 
базою даних. Реалізований за допомогою фреймворку Spring та відкритих 
Java-бібліотек; 
 Сервіс обчислень: реалізує основні алгоритми оптимізації, розрахункові 
модулі, виконання запитів із фронтенду. Виконаний на основі фреймворку 
FastAPI з використанням популярних Python-бібліотек. 
3. База даних. Містить інформацію про користувачів, параметри задач та логи 
роботи системи. Побудована на основі СКБД PostgreSQL. 
 
Рисунок 2.6 – Компонентна модель веб-застосунку 
Усі сервіси взаємодіють за допомогою REST API та передають дані у форматі 
JSON. Для ізоляції компонентів використовується інструмент контейнеризації 
Docker, а для організації спільного середовища інструмент Docker Compose. 
Веб-застосунок побудовано за архітектурною моделлю «клієнт–сервер», 
розширеною елементами мікросервісної архітектури. Основними принципами 
архітектури веб-застосунку є [24]: 
 модульність: кожен модуль виконує обмежений набір функцій і може 
розгортатися незалежно; 
44 
 
 масштабованість: горизонтальне масштабування окремих компонентів, 
таких як сервіс обчислень; 
 безпека: автентифікація та авторизація здійснюються централізовано і всі 
запити перевіряються за допомогою JWT/JWK; 
 взаємодія через API: усі компоненти обмінюються даними через REST API, 
що забезпечує сумісність і простоту інтеграції з іншими системами; 
 безперервна інтеграція та доставка: автоматичне тестування, збірка та 
розгортання через CI/CD конвеєри (GitHub CI). 
На рівні інтерфейсів користувач взаємодіє з системою лише через фронтенд, 
який надсилає запити до API-шлюзу. Далі запити перенаправляються до відповідних 
бекенд-сервісів, що виконують обчислення або керують даними. Результати 
повертаються до користувача у вигляді чисельних результатів і графіків. 
2.5 Очікувані результати реалізації ІТ-проєкту 
Реалізація цього ІТ-проєкту передбачає створення сучасного, масштабованого 
та інтегрованого веб-застосунку, який забезпечуватиме розв’язання різних типів 
задач оптимізації із використанням сучасних технологій. Його впровадження має 
комплексний вплив – функціональний, технічний, економічний і соціальний. 
Головною функціональною метою проєкту є створення високоефективного веб-
застосунку для розв’язання оптимізаційних задач, який буде гнучким, надійним і 
зручним для користувача. 
До основних очікуваних функціональних результатів ІТ-проєкту належать: 
1. Створення модульної системи обчислень веб-застосунку, що реалізує різні 
методи безумовної, умовної, глобальної оптимізації. Користувач зможе 
обирати метод оптимізації, налаштовувати його параметри та отримувати 
результат у чисельній та графічній формі; 
2. Розроблення сервісу управління користувачами з підтримкою ролей (Гість, 
Користувач, Продвинутий користувач, Адміністратор). Це забезпечить 
контроль доступу, реєстрацію, авторизацію та захист даних системи; 
45 
 
3. Створення інтерактивного інтерфейсу користувача на базі Angular, який 
забезпечить просту взаємодію з бекендом системи. Через нього користувач 
зможе створювати задачі, запускати обчислення, переглядати результати та 
зберігати їх; 
4. Реалізація системи візуалізації результатів – побудова графіків перебігу 
обчислювальних процесів і поверхонь для функцій від двох змінних , що 
значно підвищує наочність аналізу результатів; 
5. Інтеграція з базою даних PostgreSQL, у якій зберігатимуться умови задач, 
параметри методів оптимізації, результати обчислень, налаштування 
системи та дані користувачів; 
6. Розроблення API-шлюзу, який забезпечує обмін даними між компонентами 
системи, що робить можливим розширення функціональності через зовнішні 
модулі або сторонні інструменти; 
7. Розроблення адміністративної панелі керування, яка дозволяє контролювати 
роботу системи, оновлювати версії модулів, переглядати логи та 
здійснювати технічну підтримку віб-застосунку. 
З технічного погляду ІТ-проєкт є прикладом реалізації сучасної мікросервісної 
архітектури, побудованої на принципах гнучкості, масштабованості та безпеки. 
До основних очікуваних технічних результатів ІТ-проєкту належать: 
1. Створено архітектуру системи, яка передбачає три рівні: 
 рівень представлення, що забезпечує користувацьку взаємодію; 
 логічний рівень, що реалізує бізнес-логіку системи, обчислення за 
алгоритмами методів оптимізації; 
 рівень даних, що забезпечує збереження умов задач, параметри методів 
оптимізації, результати обчислень, налаштування системи та дані 
користувачів; 
2. Реалізована контейнеризація. Усі модулі розгортаються в контейнерах, що 
гарантує відтворюваність середовища та простоту розгортання. Це мінімізує 
проблеми з налаштуванням і сумісністю під час розгортання системи; 
46 
 
3. Налаштований CI/CD-конвеєр. Реалізує автоматизацію процесів тестування, 
збірки та розгортання, що забезпечує безперервну інтеграцію та розгортання 
і значно скорочує час розробки та мінімізує помилки розробників. 
4. Підключений моніторинг та логування. Впроваджено системи для 
відстеження продуктивності, стабільності та виявлення збоїв у реальному 
часі (Prometheus, Grafana, ELK stack); 
5. Реалізована безпека. Передбачено захист на рівні API (JWT-токени, HTTPS, 
фільтрація запитів, CORS), а також регулярне тестування вразливостей і 
аудит безпеки системи; 
6. Виконано покращення продуктивності. Забезпечується використанням 
кешування результатів, асинхронної обробки запитів і алгоритмів 
балансування навантаження дозволяє зменшити час відгуку системи та 
підвищити її ефективність. 
Розроблення веб-застосунку базується на використанні open-source технологій, 
що істотно знижує витрати та підвищує його гнучкість. 
До основних очікуваних економічних результатів ІТ-проєкту належать: 
1. Зниження витрат на ліцензії. Усі ключові компоненти (FastAPI, Spring Boot, 
Angular, PostgreSQL, Docker) є безкоштовними, що дозволяє уникнути 
комерційних витрат; 
2. Підвищення ефективності праці. Автоматизація процесів CI/CD і 
тестування скорочує час між етапами розробки, а повторне використання 
компонентів зменшує навантаження на команду; 
3. Можливість масштабування продукту. Готова архітектура може бути 
використана як основа для нових продуктів у сфері аналітики, освіти чи 
оптимізації; 
4. Потенціал комерціалізації. На основі даного застосунку можуть бути 
створені спеціалізовані сервіси: наприклад, модулі для бізнес-аналітики, 
прогнозування або планування ресурсів; 
47 
 
5. Зменшення вартості освітніх та дослідницьких проєктів. Застосунок може 
використовуватись як альтернатива дорогим програмним комплексам типу 
MATLAB або Wolfram Mathematica у закладах вищої освіти. 
Розробка такого ІТ-проєкту потенційно матиме вплив на наукову спільноту, а 
також на освітній процес у закладах вищої освіти при підготовці фахівців з технічних 
та інженерних спеціальностей. 
До основних очікуваних соціальних результатів ІТ-проєкту належать: 
1. Доступність. Користувачі різних рівнів підготовки зможуть 
використовувати веб-застосунок без встановлення додаткового програмного 
забезпечення; 
2. Створення освітньо-наукового середовища. Платформа може слугувати 
спільним простором для обміну задачами, результатами, дослідженнями та 
аналітикою; 
3. Сприяння академічній мобільності. Система може бути інтегрована у 
міжуніверситетські програми або онлайн-курси, що розширює можливості 
співпраці; 
4. Соціально-освітній вплив. Розвиток таких систем сприяє формуванню 
спільнот, які поєднують освіту, науку та інформаційні технології. 
Отже, ІТ-проєкт з розробки веб-застосунку розв’язання задач оптимізації 
забезпечує не лише створення інноваційного програмного продукту, але й сприяє 
формуванню системи знань і практичних навичок його користувачів та їхньої 
співпраці.  Також його реалізація сприятиме розвитку освіти, науки та цифрової 
інфраструктури, підвищенню рівня технологічної готовності освітніх і наукових 
установ, поширенню open-source практик і зміцненню зв’язків між академічними та 
прикладними дослідженнями. 
Висновки до розділу 2 
У цьому розділі було проведено комплексне обґрунтування концепції 
створення веб-застосунку для розв’язання задач оптимізації, який поєднує сучасні 
48 
 
технології розробки, інфраструктури та інформаційної безпеки. Концептуальна 
розробка охопила всі ключові аспекти життєвого циклу ІТ-проєкту – від визначення 
зацікавлених сторін до формулювання цілей, структури, архітектури та очікуваних 
результатів. 
На етапі ідентифікації зацікавлених сторін визначено основні групи учасників, 
серед яких: команда розробки, керівник проєкту, користувачі, заклади освітні та 
партнери. Для кожної категорії учасників було оцінено рівень впливу на ІТ-проєкт та 
рівень зацікавленості в його реалізації, що дозволило визначити баланс між 
технічними вимогами, науковими завданнями та кінцевими очікуваннями 
користувачів. Побудована матриця впливу та інтересів дала змогу виокремити 
ключові пріоритети комунікації та управління, а також визначити найбільш 
критичних стейкхолдерів, чиї рішення та дії безпосередньо впливають на успіх ІТ-
проєкту. 
У підрозділі, присвяченому місії, меті, цілям та цінностям, сформовано 
стратегічне бачення ІТ-проєкту як відкритої, науково орієнтованої платформи для 
розв’язання оптимізаційних задач та візуалізації результатів обчислень. Місія 
визначає прагнення створити доступний, надійний і гнучкий інструмент для 
навчання, досліджень і практичного застосування математичних методів оптимізації. 
Для деталізації етапів реалізації ІТ-проєкту сформовано SMART-цілі, які чітко 
визначають строки, критерії вимірювання, досяжність і релевантність цілей, 
пов’язаних із розробкою сервісів обчислень та безпеки, інтерфейсу користувача, 
CI/CD, оптимізації швидкодії та тестування системи. 
У межах аналізу структури веб-застосунку було створено опис функціональної 
структури застосунку, який складається з трьох рівнів – користувацького, системного 
та адміністративного. Визначено основні компоненти системи, технології їх 
реалізації, а також взаємозв’язки та ролі в реалізації архітектури. Описано також 
модель взаємодії компонентів, яка базується на використанні REST API, 
контейнеризації, аутентифікації за стандартом JWT і централізованої перевірки 
токенів за стандартом JWK. Така реалізація архітектурі підкреслює модульність і 
49 
 
гнучкість рішення, що дає можливість подальшого розширення системи без 
порушення цілісності її структури. 
Розроблена модель життєвого циклу ІТ-проєкту описує послідовність етапів 
його реалізації: ініціації, планування, розробки та впровадження. Для кожного етапу 
визначено конкретні завдання, виконавців і результати. У межах планування ІТ-
проєкту також виділено ключові віхи (milestones), які дозволяють контролювати 
прогрес та оцінювати ефективність виконання завдань. Для організації процесу 
розробки обрано методологію Agile Scrumban, що поєднує переваги Scrum 
(ітераційність, планування спринтів, чіткі ролі) та Kanban (гнучке управління 
пріоритетами, візуалізація завдань, мінімізація простоїв). Такий підхід сприяє 
підвищенню продуктивності команди, покращенню якості продукту та забезпеченню 
стабільних версій. 
В останньому підрозділі визначено очікувані результати реалізації ІТ-проєкту, 
які поділено на функціональні, технічні, економічні та соціальні. З технічного боку 
очікується створення стабільної, безпечної, масштабованої системи з реалізованою 
CI/CD інфраструктурою, системою моніторингу та автоматизованим тестуванням. 
Функціональні результати охоплюють реалізацію комплексу методів оптимізації, 
інструментів візуалізації результатів обчислень і зручного веб-інтерфейсу. 
Економічні вигоди полягають у використанні відкритих технологій, що мінімізує 
витрати на розробку, а соціальні – у сприянні поширенню доступних освітніх та 
наукових ресурсів і формуванню спільноти практиків, що їх використовують. 
Особливої уваги заслуговує потенційний ефект для наукової та освітньої 
спільноти: створений веб-застосунок може використовуватись у навчальних курсах, 
лабораторних роботах, наукових дослідженнях і міжуніверситетських проєктах. Він 
здатен стати відкритою платформою для апробації нових методів оптимізації, обміну 
результатами та впровадження міждисциплінарних підходів у дослідженнях. 
У підсумку, розділ 2 заклав концептуальну основу всього ІТ-проєкту, 
визначивши його цілі, логіку, архітектурну будову, етапи реалізації та очікувані 
результати. Це створює цілісну методологічну базу для переходу до етапів 
планування та практичної реалізації ІТ-проєкту.  
50 
 
3 ПЛАНУВАННЯ ПРОЄКТУ 
3.1 Планування змісту проєкту 
Планування змісту проєкту полягає у визначенні меж робіт, кінцевих 
результатів та структури продукту, що буде розроблений. У цьому процесі 
описуються всі ключові елементи майбутньої системи, а також роботи, необхідні для 
їх створення. Його центральними інструментами є ієрархічна структура робіт (WBS) 
та опис продуктних і управлінських компонент, які дозволяють упорядкувати 
завдання та зробити подальше планування більш точним. 
Ієрархічна структура робіт є способом декомпозиції проєкту на логічно 
впорядковані рівні. Вона дозволяє розділити складний продукт на менші та зрозумілі 
елементи, що піддаються оцінюванню, контролю та плануванню. Зазвичай WBS 
охоплює три ключові рівні [25]: 
1. Основні етапи (віхи) – великий блок робіт, завершення яких має значення 
для всього проєкту; 
2. Групи робіт – логічні частини продукту або управління, що належать до 
відповідного етапу; 
3. Робочі пакети – найменші керовані одиниці, для яких можна визначити 
строки, виконавців і ресурси. 
Створення WBS забезпечує такі переваги для управління проєктом: 
 чітке розуміння структури продукту; 
 змогу формувати календарний план з урахуванням залежностей; 
 можливість точніше оцінювати тривалість та трудомісткість робіт; 
 підвищення прозорості та контрольованості процесу. 
Для проєкту створення веб-орієнтованого застосунку для розв’язування 
оптимізаційних задач чисельними методами, WBS було сформовано на основі восьми 
ключових віх (п.2.1) і декомпозовано на групи та робочі пакети: 
1. Ініціація: 
1.1. Аналіз проблеми; 
51 
 
1.2. Формування концепції; 
1.3. Формування вимог високого рівня; 
1.4. Формування команди; 
1.5. Мілстоун: Презентація проєкту. 
2. Планування: 
2.1. Розробка структури документації; 
2.2. Створення WBS; 
2.3. Планування спринтів (Scrumban); 
2.4. Планування архітектури системи; 
2.5. Мілстоун: Затверджено план робіт. 
3. Розробка ядра застосунку: 
3.1. Проєктування API; 
3.2. Реалізація методів оптимізації: 
3.2.1. Методи одновимірної оптимізації; 
3.2.2. Методи безумовної оптимізації; 
3.2.3. Методи умовної оптимізації; 
3.2.4. Методи глобальної оптимізації; 
3.2.5. Модифікації реалізованих методів. 
3.3. Реалізація обчислювального сервісу; 
3.4. Тестування сервісу на тестових функціях; 
3.5. Документація API; 
3.6. Мілстоун: Обчислювальне ядро застосунку готове. 
4. Реалізація безпеки: 
4.1. Архітектура сервісу автентифікації; 
4.2. Реалізація ролевої моделі (4 ролі); 
4.3. Реалізація стандартів JWT/JWK; 
4.4. Інтеграція з FastAPI сервісом; 
4.5. Покриття тестами; 
4.6. Мілстоун: Сервіс безпеки готовий. 
5. Розробка UI: 
52 
 
5.1. Проєктування UX/UI: 
5.1.1. Головна сторінка; 
5.1.2. Сторінка обчислень; 
5.1.3. Сторінка результатів; 
5.1.4. Сторінка налаштувань. 
5.2. Інтеграція з бекендом; 
5.3. Візуалізація через Plotly.js; 
5.4. Мілстоун: UI завершено. 
6. Налагодження CI/CD: 
6.1. Створення конвеєра збірки; 
6.2. Автоматичне тестування; 
6.3. Автоматичне розгортання; 
6.4. Налаштування staging/production; 
6.5. Мілстоун: CI/CD повністю працює. 
7. Завершальне тестування: 
7.1. Unit-тести; 
7.2. Інтеграційні тести; 
7.3. UX-тести; 
7.4. Навантажувальні тести; 
7.5. Мілстоун: Тестування завершено. 
8. Запуск системи: 
8.1. Розгортання стабільної версії застосунку; 
8.2. Збір відгуків; 
8.3. Мілстоун: Стабільна версія застосунку. 
Дана WBS була реалізована за допомогою програмного продукту Microsoft 
Project (Рис. 3.1). 
53 
 
 
Рисунок 3.1 – WBS проєкту у Microsoft Project 
Побудована структура робіт забезпечує можливість пов’язати кожен робочий 
пакет із відповідними ресурсами, строками та відповідальними учасниками команди. 
54 
 
Завдяки цьому зміст проєкту стає формально визначеним, а сам процес його реалізації 
прогнозованим і контрольованим. 
3.2 Планування часових ресурсів проєкту 
Планування часових ресурсів визначає тривалість, послідовність і взаємні 
залежності робіт, необхідних для створення програмного продукту. На цьому етапі 
формується повна картина того, як розподіляється час між окремими завданнями, які 
етапи виконуються послідовно, а які можуть тривати паралельно. Такий підхід робить 
реалізацію проєкту передбачуваною, дозволяє контролювати строки та вчасно 
виявляти потенційні затримки. 
Першим засобом візуалізації часової структури є діаграма Ганта, яка 
відображає тривалість кожного завдання у вигляді горизонтальних смуг і показує їх 
взаємозв’язки. Для цього проєкту діаграма Ганта була побудована у Microsoft Project 
на основі сформованої WBS та орієнтовних дат завершення ключових віх (Рис. 3.2). 
 
Рисунок 3.2 – Фрагмент діаграми Ганта у Microsoft Project 
На основі діаграми Ганта були встановлені залежності між завданнями. 
Наприклад, розробка ядра застосунку не може початися раніше завершення етапу 
55 
 
планування, а тестування можливе лише після інтеграції фронтенду та бекенду. 
Паралельні роботи також були визначені: створення UI може розпочатися одночасно 
з реалізацією сервісів безпеки, оскільки фронтенд використовує проміжні API-
заглушки, що симулюють роботу бекенду до моменту інтеграції. 
Подальша деталізація часових зв’язків виконана шляхом побудови сітьового 
графіка. Такий графік демонструє логіку переходів між задачами, вказуючи попередні 
роботи, наступні роботи та можливість паралельного їх виконання. У Microsoft Project 
це представлено у вигляді залежностей типу Finish-to-Start, Start-to-Start та Finish-to-
Finish, що дозволяє побачити критичні точки проєкту (Рис. 3.3). 
 
Рисунок 3.3 – Сітьовий графік виконання завдань у Microsoft Project 
56 
 
За замовчуванням елементи сітьового графіка у Microsoft Project представлені 
у вигляді пронумерованих елементів, де кожен номер є порядковий номером задачі в 
WBS. Проте, за необхідністю, сітьовий графік можна деталізувати, розкривши кожну 
задачу в вигляді деталізованого блоку, в якому буде відображено назву задачі, 
порядковий номер, часові межі та відсоток виконання (Рис. 3.4). 
 
 
Рисунок 3.4 – Фрагмент деталізованого сітьового графіка виконання завдань у 
Microsoft Project 
 
Сітьовий графік слугує основою для визначення критичного шляху – 
послідовності робіт, затримка в яких автоматично зсуває дату завершення всього 
проєкту. У Microsoft Project критичний шлях визначається автоматично та 
виділяється червоним кольором, що дозволяє швидко відстежувати його протягом 
усього циклу виконання (Рис. 3.3). 
Отже, планування часових ресурсів забезпечило можливість узгодити 
тривалість робіт, встановити їх оптимальний порядок та визначити ключові етапи, від 
яких залежить завершення проєкту. Такий підхід гарантує ефективний контроль 
виконання, дозволяє уникати неузгоджених затримок та забезпечує своєчасне 
досягнення фінальних цілей. 
 
57 
 
3.3 Планування трудових ресурсів проєкту 
Планування трудових ресурсів формує структуру команди, розподіл обов’язків 
та визначає компетенції, необхідні для успішного виконання проєкту. На цьому етапі 
встановлюються ролі учасників, їхня відповідальність за виконання окремих робіт і 
взаємодія між ними, що забезпечує узгодженість завдань і зменшує ризик 
дублювання або втрати функцій. 
Для цього проєкту була сформована організаційна структура (OBS), яка 
відображає взаємозв’язки між ключовими ролями (Рис. 3.5). Вона побудована за 
ієрархічним принципом, де керівник проєкту координує всю діяльність, а технічні та 
аналітичні ролі згруповані відповідно до напрямів розробки. Базова структура 
включає такі позиції: керівник проєкту, бекенд-розробник, фронтенд-розробник, 
DevOps-інженер, тестувальник, дизайнер та технічний письменник. 
 
 
Рисунок 3.5 – Організаційна структура проєкту 
 
Після визначення структури команди була сформована матриця 
відповідальності RACI, яка забезпечує прозорий розподіл ролей у межах усіх 
основних робіт (Рис. 3.6). Це полегшує комунікацію, дозволяє уникнути колізій у 
прийнятті рішень і встановлює чіткі очікування щодо результатів. 
58 
 
 
Рисунок 3.6 – Матриця відповідальності проєкту 
Для подальшого планування трудових ресурсів був сформований лист ресурсів, 
який є необхідним для коректного розподілу задач у Microsoft Project, аналізу 
завантаженості кожного члена команди та визначення суми оплати за виконану 
роботу (Рис. 3.7). 
 
Рисунок 3.7 – Лист ресурсів проєкту в Microsoft Project 
Для визначення погодинних ставок було використано публічно доступні дані 
заробітних плат українського IT-ринку, отримані з відкритих аналітичних джерел 
[26]. 
59 
 
Сформовані структура команди, матриця відповідальності та перелік ресурсів 
створюють узгоджену основу для планування робіт, дозволяючи рівномірно 
розподілити навантаження та забезпечити виконання проєкту відповідно до 
встановлених строків. 
3.4 Планування якості проєкту 
Основою для контролю технічних характеристик стали метрики якості, що 
охоплюють кількісні показники продуктивності, надійності та підтримуваності. До 
них включено середній час відгуку обчислювального сервісу, відсоток успішних 
обчислень, покриття коду тестами, кількість виявлених дефектів на одиницю 
функціоналу та показники складності модулів. Ці дані дають змогу оцінити рівень 
оптимізації алгоритмів, якість інтеграції між компонентами та загальний стан проєкту 
на різних етапах. 
Для перевірки функціональності застосовані декілька рівнів тестування, що 
дозволяють охопити як окремі модулі, так і всю систему в цілому: 
 Unit-тести забезпечують перевірку коректності роботи окремих функцій, 
модулів та компонентів; 
 Інтеграційні тести контролюють взаємодію між модулями системи; 
 UX-тести оцінюють інтерфейс і взаємодію користувача із застосунком, 
визначаючи зрозумілість, логічність і доступність функціоналу; 
 Навантажувальні тести дозволяють оцінити поведінку системи під 
значними обчислювальними чи мережевими навантаженнями, 
забезпечуючи стійкість і масштабованість рішення. 
Також, оцінки і забезпечення якості розробленого продукту, було застосовано 
міжнародний стандарт ISO/IEC 25010 [27], який визначає модель якості, що охоплює 
функціональну придатність, ефективність, сумісність, безпеку та зручність 
використання. 
 
 
60 
 
3.5 Планування ризиків проєкту 
Управління ризиками – це систематичний підхід до виявлення, оцінки й 
реагування на події, які можуть негативно вплинути на проєкт [28]. Для успішної 
реалізації ІТ-проєкту з розробки веб-застосунку, критично важливо вже на етапі 
планування виявити потенційні загрози, оцінити їх і розробити план реагування. 
У межах проєкту було виконана ідентифікацію ризиків за трьома основними 
категоріями [28]: 
 технічні (пов’язані з архітектурою, продуктивністю, алгоритмами); 
 організаційні (наприклад, нестабільність команди чи недостатня 
комунікація); 
 фінансові (ризик перевищення бюджету або непередбачених витрат). 
Кожен ризик було оцінено за ймовірністю його настання та впливом на проєкт, 
що дозволило розподілити пріоритети (Таб 3.1). 
Таблиця 3.1 – Планування ризиків проєкту 
Категорія 
Опис ризику Ймовірність Вплив Стратегія реагування 
ризику 
Нестабільна Оптимізація алгоритмів, 
продуктивність ≈0.3 Високий профілювання, кешування 
алгоритмів оптимізації результатів 
Технічні Серверна 
Резервні сервери, 
інфраструктура може 
≈0.1 Високий автоматичне 
не витримати 
масштабування 
навантаження 
Втрата ключових 
Планування замін у команді 
членів команди або ≈0.3 Середній 
та перехресне навчання 
їхня недоступність 
Організаційні Регулярні зустрічі зі 
Нечіткі або змінні 
стейкхолдерами, уточнення 
вимоги на початку ≈0.6 Середній 
вимог, документування 
проєкту 
змін 
Формування фінансового 
Перевищення 
резерву, ретельна оцінка 
бюджету через ≈0.3 Високий 
вартості проєкту, 
додаткові витрати 
моніторинг витрат 
Аналіз необхідності 
Фінансові 
сторонніх сервісів, оцінка 
Неочікувані витрати 
альтернатив засобів 
на сторонні сервіси ≈0.1 Середній 
розробки проєкту, 
або ліцензії 
переговори з 
постачальниками 
61 
 
Для підвищення об’єктивності оцінювання ризиків у межах проєкту, було 
застосовано кількісну інтерпретацію ймовірностей у відсотках, використовуючи 
узагальнені відсоткові значення, що відповідає рекомендаціям міжнародних 
стандартів управління ризиками [29-30]. 
Стратегії реагування включають запобігання ризикам, а також прийняття 
ризику, якщо його вплив є помірним і вартість його усунення перевищує вигоду. 
Такий підхід узгоджується зі стандартною практикою управління ризиками в ІТ-
проєктах [28]. 
3.6 Планування бюджету проєкту 
Планування бюджету проєкту охоплює оцінку всіх витрат, необхідних для його 
успішної реалізації, включаючи оплату праці команди, вартість інфраструктури, 
можливі витрати на закупівлі та підтримку інструментів розробки. Оскільки система 
будується на основі переважно відкритих технологій, основна частина бюджету 
зосереджена на людських ресурсах. 
Оплата праці команди є ключовою статтею витрат, оскільки реалізація 
застосунку потребує зусиль фахівців різного профілю. На основі рівня навантаження 
та оплати кожного учасника проєкту, визначених на етапі планування трудових 
ресурсів проєкту, можна сформувати таблицю орієнтовної вартості праці для кожного 
учасника (Таб 3.2). 
Таблиця 3.2 – Орієнтовна вартість праці учасників проєкту 
Кількість Орієнтовний Орієнтовна 
Назва ресурсу Навантаження Оплата 
осіб на роль фонд часу (год) вартість 
Project Manager 200% 2 $30/год 664 $39840 
Backend Developer 450% 5 $25/год 104 $11700 
Frontend Developer 200% 2 $24/год 104 $4992 
DevOps Engineer 200% 2 $26/год 72 $3744 
QA Engineer 200% 2 $20/год 112 $4480 
UI/UX Designer 100% 1 $22/год 56 $1232 
Technical Writer 150% 2 $18/год 24 $648 
Прогнозована вартість оплати праці: $66636 
62 
 
У цьому проєкті показник навантаження 100% приймається як еквівалент 
одного робочого ресурсу, що відповідає одній особі рівня Junior, або Strong Junior на 
відповідній ролі. Вищі значення навантаження можна інтерпретувати як як 
комбінацію осіб одного з трьох рівнів: 
 Junior, або Strong Junior – 100% навантаження; 
 Middle – 200% навантаження, еквівалент – 2 особи Junior-рівня; 
 Senior – 300% навантаження, еквівалент – 3 особи Junior-рівня. 
Отже, оплата праці є ключовою складовою бюджету цього проєкту, оскільки 
людські ресурси становлять приблизно 85–90% загальних витрат IT-проєктів, що 
узгоджується з типовими галузевими моделями управління витратами [18]. 
3.7 Планування закупівель проєкту 
Планування закупівель у межах IT-проєкту передбачає визначення технологій, 
інструментів і сторонніх сервісів, необхідних для розробки, розгортання та подальшої 
підтримки сервісу. Закупівлі в цьому контексті охоплюють вибір програмного 
забезпечення, що використовується командою, а також інфраструктурні компоненти, 
які забезпечують працездатність і стабільність сервісу. Оскільки проєкт базується на 
сучасних фреймворках і підходах, важливо забезпечити сумісність між усіма 
інструментами, а також мінімізувати витрати шляхом використання open-source 
технологій, які не потребують додаткових ліцензій. 
Додатково варто зазначити, що процес розгортання програмного забезпечення 
здійснюватиметься на серверній інфраструктурі, яку надає замовник. Це означає, що 
у межах проєкту не передбачаються витрати на придбання або оренду ресурсів 
фізичного сервера чи виділеного VPS, а також на їх обслуговування. Наявність 
передбаченої замовником інфраструктури повністю покриває потреби системи, 
забезпечує відповідність технічним вимогам та дозволяє уникнути додаткових 
фінансових витрат, пов'язаних із розгортанням та підтримкою сервісу. 
 
 
63 
 
3.8 Планування комунікацій проєкту 
Планування комунікацій визначає способи, інструменти та регламент взаємодії 
між членами команди протягом усього життєвого циклу проєкту. Ефективна 
комунікація є необхідною умовою для узгодженого виконання завдань, контролю 
прогресу та швидкого реагування на проблеми. Для даного проєкту обрано таку 
комунікаційну інфраструктуру, яка забезпечує як синхронну, так і асинхронну 
взаємодію, підтримує прозорість роботи та дозволяє оперативно адаптуватися до змін 
у плані розробки. 
Основним каналом щоденної комунікації всередині команди слугує додаток 
Discord [31], який використовується для оперативних голосових та текстових 
обговорень. Цей інструмент дозволяє проводити щоденні стендапи, швидко 
узгоджувати технічні питання, створювати тематичні канали та забезпечує швидку 
реакцію на події. Використання Discord знижує затримки в комунікації та дає змогу 
підтримувати постійний контакт між розробниками, тестувальниками та менеджером 
проєкту незалежно від їхнього географічного розташування (Рис. 3.8). 
 
Рисунок 3.8 – Активність учасників проєкту на Discord-сервері проєкту 
Для планування робіт та візуального контролю прогресу реалізації проєкту 
застосовується CRM Trello [32], де реалізовано Kanban-дошку, що містить списки 
задач «Read Me», «To Do», «In Progress», «Review», «Testing» та «Done». Такий підхід 
64 
 
дозволяє відстежувати статус кожної задачі, бачити завантаженість команди та 
уникати перевантаження окремих учасників. Інструмент використовується також для 
фіксації технічних вимог, завдань спринту та пріоритизації робіт відповідно до 
методології Scrumban [17] (Рис. 3.9). 
 
Рисунок 3.9 – Kanban-дошка проєкту в Trello 
Для синхронізації коду та контролю версій використовується GitLab [33]. Усі 
зміни, які відбуваються в проєкті, проходять через «запит на злиття», що забезпечує 
можливість огляду змін, обговорення та контроль якості коду перед інтеграцією. 
GitLab також використовується як основний інструмент для автоматизації CI/CD 
процесів, що дозволяє команді підтримувати стабільність розгортання та уникати 
ручних помилок (Рис. 3.10). 
Такий підхід до синхронізації роботи команди проєкту гарантує, що її учасники 
завжди працюють з найактуальнішлю версією веб-застосунку. 
Зустрічі та регулярні синхронізації проводяться за визначеним графіком. 
Заплановані стендапи організовуються у Discord за вимогою учасника, спринтові 
планування та ретроспективи – раз на 7-10 днів, а демонстрації результатів – після 
завершення ключових етапів розробки. Такий режим дозволяє своєчасно виявляти 
проблеми, коригувати план виконання та забезпечувати прозорий контроль за 
реалізацією цілей проєкту.  
 
65 
 
 
Рисунок 3.10 – Активність учасників проєкту на GitLab 
Комбінація Discord, Trello і GitLab створює гнучку, ефективну й адаптивну 
комунікаційну систему, яка повністю відповідає структурі та потребам проєкту. 
 
Висновки до розділу 3 
 
У цьому розділі було здійснено комплексне планування ключових аспектів 
реалізації ІТ-проєкту створення веб-орієнтованого застосунку для розв’язування 
задач оптимізації чисельними методами. На основі сформованої WBS проведено 
декомпозицію всіх робіт, що забезпечило чітке структурування змісту проєкту та 
визначення взаємозв’язків між етапами. Планування часових ресурсів за допомогою 
діаграми Ганта та сітьового графіка дозволило встановити логічну послідовність 
робіт, а також визначити критичний шлях, дотримання якого є вирішальним для 
своєчасного завершення розробки веб-застосунку. 
Розподіл трудових ресурсів охопив формування організаційної структури 
команди, створення матриці відповідальності RACI та деталізованого листа ресурсів, 
що дало можливість оптимізувати завантаженість учасників і забезпечити професійну 
відповідність їхніх функцій. Особлива увага була приділена забезпеченню якості 
66 
 
продукту на всіх етапах розробки через використання відповідних метрик, 
багаторівневого тестування та дотримання міжнародного стандарту ISO/IEC 25010. 
Аналіз ризиків включав класифікацію технічних, організаційних та фінансових 
загроз, оцінку їхньої ймовірності й впливу, а також формування стратегії реагування. 
Цей підхід забезпечує підвищення стійкості проєкту до непередбачуваних факторів. 
Бюджетні розрахунки, що враховують як оплату праці, так і інфраструктурні витрати, 
дозволили визначити загальну вартість реалізації ІТ-проєкту. Планування закупівель 
показало, що технологічний стек базується на open-source рішеннях, що суттєво 
знижує витрати. Розроблена стратегія комунікацій із використанням Discord, Trello та 
GitLab гарантує ефективну взаємодію команди та прозоре керування робочими 
процесами. 
Отже, комплексне планування забезпечило проєкт усіма необхідними 
структурними, часовими, ресурсними, фінансовими та організаційними 
передумовами для його подальшої успішної реалізації. Усі етапи планування проєкту 
створюють узгоджену систему управління, яка мінімізує ризики, оптимізує витрати 
та формує умови для досягнення високої якості кінцевого продукту. 
  
67 
 
4 ПРАКТИЧНА РЕАЛІЗАЦІЯ ПРОЄКТУ 
4.1 Опис продукту проєкту 
Розроблений у межах проєкту веб-орієнтований застосунок являє собою 
комплексну інтерактивну платформу, призначену для розв’язання задач оптимізації 
чисельними методами та отримання візуалізованих результатів обчислень у 
реальному часі. 
Головна сторінка застосунку виконує функцію ознайомчого модуля, що 
представляє мету та загальну концепцію сервісу. Хоча у поточній версії вона 
переважно має шаблонний характер, вона демонструє загальний підхід до побудови 
інтерфейсу: структуроване подання інформації, лаконічність, поділ змістових блоків 
та доступність важливих елементів навігації для користувачів будь-якого рівня 
технічної підготовки (Рис. 4.1). 
Невід’ємною частиною будь-якої веб-платформи, що працює з 
персоналізованими даними, є модуль авторизації. У застосунку передбачено два 
незалежні механізми реєстрації та входу: традиційна автентифікація через e-mail і 
пароль та авторизація через зовнішнього провайдера Google (Рис. 4.2). 
Реалізація комбінованого механізму входу до застосунку підвищує доступність 
платформи та дозволяє різним категоріям користувачів швидко створювати облікові 
записи без додаткових труднощів. На практиці це сприяє розширенню цільової 
аудиторії та підвищує безпековий рівень сервісу завдяки використанню захищених 
каналів автентифікації зовнішніх провайдерів. 
Окремо реалізований механізм підтвердження електронної адреси відіграє 
важливу роль у забезпеченні достовірності облікових записів та запобіганні 
зловживанням. Після реєстрації система надсилає користувачеві лист із унікальним 
посиланням, за яким необхідно перейти, щоб підтвердити створення обікового запису 
перед першим входом (Рис. 4.3-4.4). 
 
 
68 
 
 
Рисунок 4.1 – Головна сторінка застосунку 
69 
 
 
Рисунок 4.2 – Сторінка реєстрації 
 
Рисунок 4.3 – Сторінка авторизації після успішного запиту на створення облікового 
запису користувача 
70 
 
 
Рисунок 4.4 – Лист, що надсилається на е-пошту користувача для підвердження 
створення облікового запису 
Такий підхід є загальноприйнятим стандартом у веб-системах, що зберігають 
критично важливі дані, або забезпечує базовий рівень захисту від створення 
неавтентичних чи автоматично згенерованих акаунтів. Механізм відновлення пароля 
також є важливою складовою: він дозволяє користувачу відновити доступ до свого 
облікового запису шляхом надсилання спеціального посилання на електронну пошту 
(Рис. 4.5). 
 
Рисунок 4.5 – Сторінка запиту на скидання пароля 
Цей інструмент суттєво підвищує доступність системи, оскільки мінімізує 
ризик втрати доступу до облакового запису, що вимагало б реєстрацію нового. 
71 
 
Сторінка налаштувань забезпечує можливість персоналізації середовища 
застосунку та керування особистими даними. Користувач може змінювати ім’я, 
адресу електронної пошти, пароль, а також прив’язувати або від’єднувати Google-
акаунт (Рис. 4.6).  
 
Рисунок 4.6 – Сторінка налаштувань 
Окрім цього, передбачено зміну інтерфейсної мови та кольорової теми 
застосунку, причому ці параметри можуть бути змінені в будь-який момент, навіть 
без входу в систему, що дозволяє користувачу при першому відвідуванні сайту в 
гостьовому режимі, вже змінити ці налаштування під зручні для себе параметри 
(Рис. 4.7). 
 
Рисунок 4.7 – Зміна мови та кольорової теми в гостьовому режимі 
72 
 
Такий підхід сприяє кращій доступності платформи та враховує різний досвід і 
потреби користувачів. Перемикання теми дозволяє адаптувати візуальний стиль під 
умови освітлення, тоді як зміна мови сприяє локалізації та підвищенню зручності 
роботи міжнародних аудиторій. Разом зі зміною мови інтерфейсу сайту, змінюється 
мова відображення результатів виконання задачі та даних на графіках. 
Ключовим функціональним модулем застосунку є сторінка обчислень, яка 
дозволяє працювати з повною бібліотекою методів оптимізації (Рис. 4.8). 
 
Рисунок 4.8 – Сторінка вибору методу оптимізації 
Усі доступні методи отримуються від обчислювального сервісу у форматі 
JSON, що містить опис кожного методу, перелік параметрів, їх обмежень, типи полів 
73 
 
введення, значення за замовчуванням, а також набір доступних тестових функцій. 
Завдяки такому підходу інтерфейс є повністю динамічним і не потребує ручного 
оновлення при додаванні нових алгоритмів або змінах у їх структурі (Рис. 4.9), що 
забезпечує розширюваність системи та її підтримка у довгостроковій перспективі. 
 
Рисунок 4.9 – Сторінка введення параметрів задачі на прикладі методу дихотомії 
Користувачеві доступні методи оптимізації різних класів: одновимірної, 
безумовної, умовної та глобальної оптимізаціїі. Особливо важливим є те, що всі ці 
методи мають загальну структуру інтерфейсу, що дозволяє проводити чисельні 
експерименти з різними методами та аналізувати різні підходи до оптимізації в межах 
одного середовища. 
74 
 
Процес виконання методів оптимізації організований у вигляді серії запусків 
алгоритму, кожен із яких може мати власний результат. Користувач може задати 
певну кількість повторень методу при заданих вхідних параметрах, що дозволяє 
оцінювати стабільність його роботи. Під час виконання методу оптимізації 
обчислювальний сервіс передає на фронтенд прогрес виконання в режимі реального 
часу через WebSocket-підключення (Рис. 4.10). 
 
Рисунок 4.10 – Відображення прогресу виконання в режимі реального часу 
Такий підхід необхідний для довготривалих обчислень, характерних для 
складних методів оптимізації, де виконання може тривати десятки секунд і потребує 
інформування користувача про поточний стан процесу. Передавання проміжних 
результатів підвищує прозорість виконання алгоритмів і дає змогу вчасно реагувати 
на можливі збої або помилки. 
Після завершення оптимізації користувач отримує структуровані результати, 
що включають: наближене значення точки мінімуму (максимуму), значення цільової 
функції в цій точці, кількість виконаних ітерацій, точність результату, а також дані 
для побудови графіків. 
Візуалізація результатів обчислень виконується засобами бібліотеки Plotly.js та 
включає графік функції (для одновимірних і двовимірних задач), графік збіжності 
ітераційного процесу, графік зміни керуючих коефіцієнтів, якщо метод їх 
використовує (Рис. 4.11-4.13). 
 
 
 
75 
 
 
Рисунок 4.11 – Приклад виведення результатів обчислень та виведення графіку 
фукнції для методу APSO (Варіант 2) для тестової функції Швафела 
76 
 
 
Рисунок 4.12 – Приклад виведення графіків фінальних положень частинок та 
збіжності значення функції для методу APSO (Варіант 2) для тестової функції 
Швафела 
77 
 
 
Рисунок 4.13 – Приклад виведення графіків точності обрахунків та керуючих 
коефіцієнтів для методу APSO (Варіант 2) для тестової функції Швафела 
Це дозволяє користувачу проводити глибокий аналіз поведінки методів 
оптимізації при різних вхідних даних, оцінювати швидкість збіжності ітераційного 
процесу, стабільність методу, характер зміни параметрів методів та точність 
знайденого розв’язку. При дослідженні методів глобальної оптимізації, таких як PSO 
78 
 
чи APSO, це допомагає простежити динаміку зміни параметрів та оцінити 
ефективність адаптивних складових методів колективного інтелекту. 
Для забезпечення відтворюваності експериментальних досліджень 
передбачено можливість експорту результатів у форматі JSON, який містить усю 
необхідну інформацію для повторного перегляду результатів без повторного 
виконання обчислень (Рис. 4.14). 
 
Рисунок 4.14 – Експорт результатів розв’язання задачі оптимізації у форматі JSON 
Імпорт такого документу дозволяє автоматично заповнити всі параметри форми 
введення параметрів задачі (рис. 4.9), побудувати  відповідні графіки та переглянути 
результати обчислень. Це значно розширює можливості застосунку в навчальному та 
дослідницькому контекстах, оскільки дозволяє створювати каталоги з результатами 
експериментів для подальшого їх аналізу та/або демонстрації. 
На рівні системної діагностики веб-застосунку передбачено логування 
помилок, яке виконується на стороні бекенду та фронтенду. Такий підхід дозволяє 
оперативно виявляти та усувати технічні проблеми. Водночас, у системі не 
79 
 
зберігаються конфіденційні чи персональні дані користувача, що відповідає 
стандартам захисту приватності (Рис. 4.15). 
 
Рисунок 4.15 – Логування в сервісі безпеки 
Отже, створений веб-застосунок є завершеним функціональним продуктом, що 
дозволяє реалізовувати повний цикл дослідження задач оптимізації – від вибору 
методу до результатів обчислень та візуального аналізу ітераційного процесу, що 
відповідає поставленим цілям проєкту та забезпечує його практичну цінність. 
4.2 Опис процесу реалізації проєкту 
Процес реалізації проєкту охопив повний цикл створення веб-орієнтованого 
застосунку – від розробки архітектури до інтеграції всіх компонентів у єдину систему. 
Основна увага була зосереджена на забезпеченні узгодженості між фронтендом та 
бекендом, а також на створенні інтерфейсу, здатного динамічно адаптуватися до 
змісту, який надається сервером. Проєкт реалізовувався поетапно, із чітким 
розподілом завдань відповідно до WBS (п. 3.1), що дозволило систематизувати 
роботи та забезпечити контроль якості на кожному етапі реалізації проєкту. 
80 
 
Першим етапом стала організація архітектури застосунку, де визначалися межі 
відповідальності між фронтендом, бекендом і сервісом обчислень. У межах цього 
етапу формувалася логіка обробки даних, моделі взаємодії компонентів, а також 
засади для подальшого розширення системи. Значну увагу приділено забезпеченню 
незалежності модулів, оскільки застосунок повинен підтримувати додавання нових 
чисельних методів без необхідності переписування фронтенд-частини. Це стало 
можливим завдяки узгодженню формату JSON-структур, які передають опис методів, 
їх параметрів і тестових функцій (Додаток Б.1). Такий підхід сформував фундамент 
динамічної генерації інтерфейсу на основі даних, отриманих від сервісу обчислень 
(Додаток Б.2). 
На другому етапі, після завершення архітектурного проєктування, розпочалась 
реалізація бекенд-модулів. Для сервісу безпеки основні завдання включали: розробку 
механізмів автентифікації та керування користувачами, організацію інфраструктури 
ролей, створення механізму підтвердження електронної пошти та відновлення 
доступу. Реалізація цих можливостей мала на меті забезпечити безпечний і надійний 
спосіб взаємодії користувачів із системою, що є критично важливим для отримання 
коректних результатів та запобігання зловживанням. Для кожної операції були 
створені відповідні API-ендпоінти (Додаток Б.3), а зберігання даних здійснюється у 
базі даних під керування PostgreSQL з використанням таблиць, зв’язок між якими 
можна описати за допомогою ER-діаграми (Рис. 4.16). 
Третім етапом стала реалізація сервісу чисельних методів оптимізації, 
відповідального за безпосереднє виконання алгоритмів, що реалізують ці методи. 
Важливою особливістю цього модуля є забезпечення можливості передавання 
проміжних результатів у процесі обчислення, що необхідно для наочної демонстрації 
динаміки збіжності ітераційного процесу та контролю прогресу. Така 
функціональність ґрунтується на використанні WebSocket-з’єднання, яке дозволяє 
сервісу в реальному часі повідомляти інтерфейс про стан виконання задачі (Додаток 
Б.4). Це є стандартним підходом для обчислювальних систем, де час виконання може 
бути значним і де користувача потрібно інформувати про хід процесу, забезпечуючи 
прозорість роботи чисельних методів оптимізації. 
81 
 
 
Рисунок 4.16 – ER-діаграма бази даних веб-застосунку 
Фронтенд-частина застосунку розроблялася паралельно з бекендом та сервісом 
обчислень, але з урахуванням усіх вимог до динамічності й адаптивності інтерфейсу. 
Ключовим завданням було забезпечити універсальний механізм інтерпретації JSON-
опису методів так, щоб форма параметрів автоматично перебудовувалася для 
кожного методу оптимізації. Такий підхід дає змогу уникнути дублювання коду, 
спрощує додавання нових методів та забезпечує масштабованість системи. Значна 
частина роботи була присвячена інтеграції графічних компонентів на основі Plotly.js 
(Додаток Б.5), оскільки візуалізація є одним із основних засобів аналізу поведінки 
ітераційних оптимізаційних методів. Потрібно було забезпечити коректне 
відображення 3D-поверхонь для двовимірних задач оптимізації, графіків збіжності 
ітераційного процесу, точності результатів та додаткових графіків зміни параметрів, 
що є характерними, наприклад, для адаптивних варіантів PSO. 
82 
 
Після реалізації основних функціональних компонентів розпочався четвертий 
етап реалізації проєкту – етапу інтеграції та тестування. Одним із ключових аспектів 
стала перевка відповідності форматів даних між усіма модулями. Особлива увага 
приділялася обробці асинхронних подій, коректності передавання проміжних 
результатів та синхронізації оновлення графіків. Під час інтеграції виявлялися окремі 
випадки неспівпадіння форматів, що вимагало перегляду моделей у бекенді або 
сервісі обчислень, але у підсумку вдалося забезпечити повну узгодженість обміну 
даними між компонентами системи. 
Завершальним п’ятим етапом реалізації проєкту стала оптимізація роботи веб-
застосунку, що включала підвищення продуктивності візуалізації результатів 
обчислень, мінімізацію кількості запитів до сервера та покращення поведінки 
сторінки обчислень при великій кількості графіків. Було вдосконалено механізми 
кешування статичних ресурсів, а також оптимізовано обробку JSON-структур для 
забезпечення швидкого відтворення результатів у режимі імпорту. 
У підсумку процес реалізації проєкту поєднав системний підхід до розробки 
архітектури, паралельну роботу над структурно незалежними компонентами веб-
застосунку, поступове інтегрування функціональності та багатоетапне тестування. Це 
дозволило сформувати стійку, розширювану та функціонально завершену платформу, 
яка забезпечує повний цикл роботи з чисельними методами оптимізації – від взаємодії 
користувача з інтерфейсом до розв’язання складних обчислювальних задач у 
реальному часі. 
4.3 Тестування продукту і аналіз результатів 
Тестування стало одним із ключових етапів практичної реалізації проєкту, 
оскільки кінцевий продукт поєднує в собі веб-інтерфейс, модуль автентифікації, 
сервіс обчислень і механізми динамічної генерації даних. Складність системи 
потребувала комплексного підходу до перевірки її працездатності, який охоплював 
модульні тести, інтеграційні перевірки, оцінку зручності користування, аналіз 
продуктивності в умовах навантаження, а також експерименти, необхідні для 
83 
 
визначення коректності реалізованих чисельних методів оптимізації. Метою цього 
етапу стало підтвердження того, що система забезпечує стійку роботу, точність 
результатів обчислень та передбачувану поведінку у всіх сценаріях взаємодії. 
Модульне тестування охоплювало як бекенд-модуль авторизації, так і окремі 
алгоритми оптимізації у сервісі чисельних обчислень. У межах бекенду перевірялися 
коректність обробки запитів, створення користувачів, оновлення профільної 
інформації, валідація токенів, виконання логіки підтвердження та відновлення 
доступу (Додаток Б.6). Тести охоплювали як стандартні сценарії, так і випадки з 
некоректними або пошкодженими даними, оскільки у системах такого типу гарантія 
коректної обробки помилок є критично важливою. Окрему увагу приділено перевірці 
поведінки ролей користувачів, доступу до захищених ресурсів і відповідності 
структури відповідей встановленим контрактам. У сервісі обчислень модульні тести 
були орієнтовані на перевірку основних допоміжних функцій, математичних операцій 
та внутрішніх компонентів, які формують логіку роботи алгоритмів. Цей етап 
дозволив переконатися, що окремі частини системи працюють стабільно незалежно 
одна від одної. 
Інтеграційне тестування було зосереджене на перевірці взаємодії між 
фронтендом, сервісом безпеки та сервісом обчислень. У процесі тестування 
перевірялися послідовність виконання запитів, обмін даними, обробка WebSocket-
повідомлень і коректність побудови динамічних форм. Тестування відбувалось за 
допомогою інструментів Postman [34] та включало сценарії створення облікового 
запису, виконання входу в систему, оновлення профілю користувача, підготовки 
вхідних даних задачі оптимізації, запуску обчислень і перегляду результатів 
(Рис. 4.17). 
Важливою частиною тестування було підтвердження того, що структура JSON-
документів, отриманих із сервісу обчислень, коректно інтерпретується інтерфейсом 
та призводить до генерації відповідних елементів форми введення вхідних даних. 
Окремо перевірявся процес передавання проміжного прогресу через WebSocket-
з’єднання, що дало змогу підтвердити стабільність асинхронної комунікації й 
коректність оновлення графічних елементів у режимі реального часу (Рис. 4.18). 
84 
 
 
Рисунок 4.17 – Шаблон для тестування авторизації в Postman 
 
Рисунок 4.18 – Шаблон для тестування WebSocket-з’єднання в Postman 
Це важливо для задач оптимізації, оскільки вони часто потребують значної 
кількості обчислень, і користувач повинен отримувати інформацію про перебіг 
процесу. 
85 
 
У ході тестування інтерфейсу перевірялися коректність повідомлень у разі 
введення некоректних вхідних параметрів, інтуїтивність механізмів перемикання 
теми та мови інтерфейсу, а також зручність перегляду результатів у вигляді графіків 
і таблиць. У результаті такого тестування та виправлень недоліків, інтерфейс став 
інтуїтивно зрозумілим навіть для користувачів, які не мають глибоких технічних 
знань, що є важливим аспектом для інструментів навчального характеру. Особливо 
позитивною виявилася поведінка сторінки обчислень у випадках зі складними 
методами оптимізації, де кількість вхідних параметрів і складність обчислень є 
значними. 
Навантажувальне тестування проводилося з метою оцінки стабільності 
експлуатації веб-застосунку при великій кількості користувацьких запитів і тривалих 
обчисленнях. Перевірялися швидкість відповіді API сервісу безпеки, здатність 
підтримувати кілька паралельних обчислень та поведінка WebSocket-підключень 
(Рис. 4.19). 
 
Рисунок 4.19 – Навантажувальне тестування сервісу безпеки в Postman 
86 
 
Результати тестування показали, що веб-застосунок зберігає стабільність 
роботи навіть у випадках одночасного запуску кількох задач оптимізації. Система 
демонструє передбачуваний час відповіді, ефективно розподіляє навантаження між 
своїми компонентами та не втрачає підключення під час інтенсивного обміну даними. 
Окремим етапом тестування стали чисельні експерименти, що проводилися для 
перевірки точності та коректності реалізованих алгоритмів оптимізації. Відповідно до 
вимог проєкту було обрано набір з 20-ти популярних тестових функцій, серед яких 
функції Швафела, Розенброка та Растригіна, які традиційно використовуються для 
аналізу поведінки локальних та глобальних методів оптимізації. Для кожної функції 
проводилася серія запусків із різними початковими даними, що дозволило оцінити 
точність методу оптимізації, стійкість до зміни його параметрів, схильність 
потрапляти в локальні мінімуми, стабільність збіжності ітераційного процесу та 
швидкість зменшення (збільшення) значень цільової функції (Рис. 4.12). 
Особливо важливим було те, що результати, отримані сервісом обчислень, 
порівнювалися з відомими оптимальними значеннями тестових функцій. Це 
дозволило підтвердити коректність реалізації алгоритмів відповідних методів 
оптимізації, а також оцінити похибку одержаних результатів, яка є невід’ємною 
частиною чисельних методів. 
Для алгоритмів глобальної оптимізації, зокрема для PSO і його адаптивних 
модифікацій, виконувалося тестування на багатовимірних функціях, де поведінка 
алгоритму може бути ускладненою через наявність великої кількості локальних 
мінімумів. Аналіз результатів показав, що реалізовані алгоритми демонструють 
характерну поведінку, притаманну їх теоретичним моделям, зокрема швидке 
зменшення значення функції на початкових етапах і подальшу стабілізацію поблизу 
знайденої точки локального мінімуму (максимуму). Візуалізація графіків збіжності 
підтвердила, що алгоритми стабільно сходяться до областей мінімуму, а у випадку 
адаптивних варіантів PSO, коефіцієнти змінювались за прогнозованими траєкторіями 
(Рис. 4.13). 
Результати знаходження екстремальних точок для функцій від однієї змінної  на 
заданих проміжках також підтвердили коректність реалізації методів дихотомії, 
87 
 
золотого перерізу, Фібоначчі та парабол. На графіках збіжності ітераційного процесу 
було видно характерну лінійну або надлінійну швидкість збіжності залежно від 
методу та властивостей цільової функції (Рис. 4.20-4.21). 
 
Рисунок 4.20 – Графіки функції та значеннь точки, виведені під час виконання 
методу Фібоначчі на квадратичній тестовій функції та рекомендованих параметрах 
задачі 
88 
 
 
Рисунок 4.21 – Графіки збіжності значення функції та точності обрахунків, виведені 
під час виконання методу Фібоначчі на квадратичній тестовій функції та 
рекомендованих параметрах задачі 
Важливо, що похибки одержаних результатів відповідали очікуваним 
значенням, що дозволяє використовувати застосунок для демонстрації властивостей 
відповідних методів одновимірної оптимізації під час їх вивчення. 
89 
 
У підсумку результати тестування підтверджують, що розроблений веб-
застосунок відповідає вимогам щодо зручності його використання, точності 
результатів обчислень і стабільності роботи методів оптимізації. Він забезпечує 
реалізацію всіх етапів дослідження чисельних методів оптимізації, які охоплюють 
обрання та реалізацію методів оптимізації, перегляд динаміки збіжності ітераційного 
процесу, аналіз точності одержаних результатів та їх порівняння.  
Вище сказане підтверджує, що розроблений веб-застосунок для розв’язання 
задач оптимізації чисельними методами є повноцінним інструментом як для 
навчальних, так і для дослідницьких цілей, який забезпечує можливості для аналізу 
роботи та ефективності цих методів, а також експериментування з різними вхідними 
даними та праметрами керування методів, що практично неможливо реалізувати за 
допомогою традиційних статичних програмних рішень. 
 
Висновки до розділу 4 
 
У межах даного розділу було здійснено всебічний аналіз етапів практичної 
реалізації веб-орієнтованого застосунку для розв’язання задач оптимізації 
чисельними методами та оцінено його функціональні, архітектурні та обчислювальні 
характеристики. На етапі опису продукту продемонстровано структуру інтерфейсу 
користувача, організацію його основних сторінок та реалізацію механізмів 
налаштування особистого кабінету користувача, його авторизації, налаштуванння  
середовища для виконання оптимізаційних експериментів. Було показано, що веб-
застосунок забезпечує повний цикл взаємодії користувача з системою – від 
автентифікації до перегляду інтерактивних графічних результатів обчислень, що 
відповідає поставленим вимогам і забезпечує високий рівень зручності його 
використування. 
Опис процесу реалізації проєкту засвідчив, що розробка здійснювалася 
поетапно, з дотриманням принципів модульності, узгодженості компонентів та 
незалежності функціональних частин системи. Було виконано проєктування та 
впровадження бекенд-частини, сервісу обчислень і фронтенду, що дало змогу 
90 
 
побудувати розширювану архітектуру з можливістю динамічного формування 
інтерфейсу на основі JSON-структур. Особливе значення мав етап інтеграції, який 
забезпечив узгодженість форматів представлення даних, стабільність обміну 
інформацією через WebSocket-з’єднання та правильність роботи алгоритмів 
оптимізації у режимі реального часу. 
Проведення комплексного тестування підтвердило функціональну 
завершеність і стабільність продукту. Модульні тести засвідчили коректність роботи 
окремих компонентів, інтеграційні перевірки підтвердили правильну взаємодію між 
модулями, а перевірки зручності використання дозволили оцінити логічність та 
інтуїтивність інтерфейсу користувача. Навантажувальні експерименти показали 
стійкість системи до паралельних обчислень і здатність підтримувати тривалі 
процеси без втрати даних. Проведені чисельні експерименти з популярними 
тестовими функціями засвідчили правильність роботи реалізованих алгоритмів 
оптимізації та відповідність одержаних результатів обчислень відомим 
оптимальними значеннями тестових функцій, що підтверджує коректність 
математичної частини застосунку та його придатність для використання у навчальних 
і дослідницьких цілях. 
Отже, реалізований у межах проєкту веб-застосунок для розв’язання задач 
оптимізації чисельними методами є комплексним, функціонально завершеним та 
технологічно стійким рішенням, яке забезпечує можливість проведення широкого 
спектру чисельних експериментів, аналізу поведінки чисельних методів оптимізації 
та візуалізації їх результатів. Результати тестування підтвердили досягнення 
поставлених у проєкті цілей і демонструють готовність веб-застосунку до його 
використання для розв’язання задач оптимізації чисельними методами в навчальних, 
дослідницьких та практичних цілях. 
  
91 
 
ВИСНОВКИ 
У результаті виконання кваліфікаційної роботи магістра було здійснено 
всебічне дослідження процесів управління проєктом створення веб-орієнтованого 
застосунку для розв’язування оптимізаційних задач чисельними методами. Аналіз 
предметної області, проведений на початковому етапі, підтвердив актуальність і 
практичну значущість розробки інструментів, які забезпечують доступний інтерфейс 
для дослідження алгоритмів оптимізації та наочного представлення їх результатів у 
реальному часі. 
Виконано аналіз сучасних чисельних методів оптимізації, їх класифікації та 
сфер застосування, що дозволило визначити вимоги до майбутнього застосунку та 
сформулювати ключові функціональні характеристики системи. У роботі досліджено 
як локальні, так і глобальні методи оптимізації, що забезпечило комплексний підхід 
до формування структури платформи. 
На основі аналізу предметної області сформовано концепцію веб-застосунку та 
визначено його роль у навчальних, дослідницьких та прикладних задачах. Було 
обґрунтовано вибір веб-орієнтованого підходу як найбільш ефективного з позиції 
доступності, масштабованості, кросплатформності та можливості інтерактивної 
роботи користувачів із результатами оптимізації в реальному часі. 
У результаті виконання роботи було розроблено повну структуру продукту: 
визначено функціональні модулі, взаємозв’язки між ними, вимоги до архітектури, 
модель користувача, механізми роботи з методами оптимізації та інструменти 
візуалізації. Було створено модель даних та описано структуру бази даних, яка 
забезпечує надійне зберігання облікових даних користувачів і службової інформації. 
Виконано повне планування ІТ-проєкту згідно з сучасними підходами 
управління проєктами. Створено WBS, визначено зміст робіт, розроблено мережеву 
діаграму, побудовано діаграму Ганта, визначено критичний шлях, оцінено часові, 
ресурсні та вартісні параметри. Враховано ризики реалізації проєкту, для яких 
розроблено матрицю «ймовірність–вплив» та сформовано стратегії реагування. 
Реалізовано усі ключові компоненти веб-застосунку: фронтенд, сервіс безпеки 
та сервіс обчислень. Фронтенд забезпечує динамічне формування інтерфейсу на 
92 
 
основі структур JSON, наданих сервісом обчислень; сервіс безпеки відповідає за 
автентифікацію, авторизацію, керування ролями та безпекою; обчислювальний 
модуль виконує реалізацію чисельних методів оптимізації та передає проміжні дані в 
реальному часі через WebSocket-з’єднання. 
Особливу увагу було приділено створенню механізму інтерактивної візуалізації 
результатів оптимізації. Використання бібліотеки Plotly.js дозволило будувати 
графіки цільових функцій для одно- і двовимірних задач, графіки збіжності 
ітераційного процесу, точності одержаних результатів та додаткових параметрів. Це 
забезпечило можливість глибокого аналізу поведінки алгоритмів, що є важливим для 
навчальних та дослідницьких цілей. 
Виконано комплексне тестування веб-застосунку: модульне, інтеграційне, 
навантажувальне та математичне. Результати тестування підтвердили стабільність 
роботи системи, коректну взаємодію між усіма компонентами, правильність 
побудови інтерфейсів, відповідність структури даних вимогам та надійність роботи в 
умовах паралельних обчислень. Зокрема, під час математичних тестів було 
підтверджено збіжність методів до відомих екстремумів тестових цільових функцій. 
Результати роботи можуть бути рекомендовані для подальшого впровадження 
в освітній процес при вивченні дисциплін з методів оптимізації, чисельних методів, 
моделювання та веб-технологій. Також застосунок може бути основою для розвитку 
промислових рішень, де необхідні інструменти візуалізації та порівняння різних 
підходів до оптимізації. 
У майбутньому можливим напрямом розвитку системи є розширення 
бібліотеки методів оптимізації, застосування технологій машинного навчання для 
адаптації параметрів алгоритмів та створення багатокористувацького середовища для 
спільних досліджень. 
Узагальнюючи результати кваліфікаційної роботи, можна стверджувати, що 
поставлену мету досягнуто повністю, усі задачі виконані, а кінцевий продукт 
відповідає вимогам, сформульованим у початкових етапах дослідження. Розроблений 
веб-орієнтований застосунок є завершеним, функціонально стійким, практично 
цінним та готовим до використання у навчальній, науковій та прикладній діяльності.  
93 
 
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ 
1. J. Nocedal, S. Wright, Numerical Optimization. Springer, 2006. 664 с. URL: 
https://books.google.com.ua/books/about/Numerical_Optimization.html?id=VbHYoSyelF
cC&redir_esc=y (дата звернення: 07.11.2025). 
2. P. Mell, T. Grance, The NIST Definition of Cloud Computing. National Institute of 
Standards and Technology, Gaithersburg, MD, 2011. 7 с. URL: 
https://nvlpubs.nist.gov/nistpubs/legacy/sp/nistspecialpublication800-145.pdf (дата 
звернення: 07.11.2025). 
3. J. Kennedy, R. Eberhart, Particle Swarm Optimization, Proceedings of the IEEE - 
International Conference on Neural Networks, Perth, WA, Australia, 1995, pp. 1942–1948. 
URL:https://www.cs.tufts.edu/comp/150GA/homeworks/hw3/_reading6%201995%20part
icle%20swarming.pdf (дата звернення: 07.11.2025). 
4. Gurobi Optimization, LLC. Gurobi Cloud Platform Documentation. 2023. URL: 
https://www.gurobi.com/documentation/ (дата звернення: 07.11.2025). 
5. S. Boyd, L. Vandenberghe, Convex Optimization. Cambridge University Press, 
Cambridge, 2004. 716 с. URL: 
https://books.google.com/books/about/Convex_Optimization.html?id=mYm0bLd3fcoC 
(дата звернення: 07.11.2025). 
6. L. Bass, P. Clements, R. Kazman, Software Architecture in Practice. Addison-
Wesley, Boston, MA, 2012. 624 с. URL: 
https://books.google.com/books/about/Software_Architecture_in_Practice.html?id=-
II73rBDXCYC (дата звернення: 07.11.2025). 
7. M. Dorigo, T. Stützle, Ant Colony Optimization. MIT Press, Cambridge, MA, 2004. 
8. Virtual Library of Simulation Experiments: Test Functions and Datasets. 
https://www.sfu.ca/~ssurjano/optimization.html (дата звернення: 07.11.2025). 
9. MATLAB Optimization Toolbox. URL: 
https://www.mathworks.com/products/optimization.html (дата звернення: 07.11.2025). 
10. Gurobi Optimizer. URL: https://www.gurobi.com/products/gurobi-optimizer/ (дата 
звернення: 07.11.2025). 
11. SciPy. URL: https://scipy.org (дата звернення: 07.11.2025). 
94 
 
12. Google OR-Tools. URL: https://developers.google.com/optimization (дата 
звернення: 07.11.2025). 
13. Wolfram Mathematica. URL: https://www.wolfram.com/mathematica (дата 
звернення: 07.11.2025). 
14. GAMS (General Algebraic Modeling System). URL:  https://www.gams.com/ (дата 
звернення: 07.11.2025). 
15. The R Project for Statistical Computing. URL: https://www.r-project.org (дата 
звернення: 07.11.2025). 
16. Жалдак М.І., Триус Ю.В. Основи теорії і методів оптимізації: Навчальний 
посібник. Черкаси: Брама-Україна, 2005. 608 с. 
17. Scrumban: Mastering two Agile methodologies, Atlassian Blog, 2025. URL: 
https://www.atlassian.com/agile/project-management/scrumban (дата звернення: 
12.11.2025). 
18. L. Albert. Project Planning and Control. Fourth Edition. Oxford OX2 8DP: Elsevier 
Butterworth-Heinemann Linacre House, 2003. 382 p. URL: 
https://books.google.com.ua/books/about/Project_Planning_and_Control.html?id=o2hGA
AAAYAAJ&redir_esc=y (дата звернення: 12.11.2025) 
19. Kanban vs Scrum: повне порівняння гнучких методологій розробки ПЗ. 
WEZOM. URL: https://wezom.com.ua/ua/blog/kanban-vs-scrum-povne-porivnyannya-
gnuchkih-metodologiy-rozrobki-pz (дата звернення: 12.11.2025) 
20. Y. Riahi, Project stakeholders: Analysis and Management Processes, SSRG 
International Journal of Economics and Management Studies, vol. 4, no. 3, pp. 39-45, 2017. 
URL:https://www.researchgate.net/publication/317607551_Project_stakeholdersAnalysis_
and_Management_Processes (дата звернення: 12.11.2025). 
21. Stakeholder Analysis using the Power Interest Grid. ProjectManagement Wiki. URL: 
https://www.projectmanagement.com/wikis/368897/stakeholder-analysis--using-the-
power-interest-grid (дата звернення: 12.11.2025). 
22. SMART Objectives: A Strategic Approach to Achieving Business Success. 
ResearchGate. URL: 
95 
 
https://www.researchgate.net/publication/387976768_SMART_Objectives_A_Strategic_A
pproach_to_Achieving_Business_Success (дата звернення: 12.11.2025). 
23. Ng, A. Chi Keung. Contemporary Identity and Access Management Architectures: 
Emerging Research and Opportunities. IGI Global. p. 215. ISBN 978-1-5225-4829-4. URL: 
https://books.google.com.ua/books?id=ipBFDwAAQBAJ&pg=PA215&redir_esc=y#v=on
epage&q&f=false (дата звернення: 12.11.2025) 
24. L. Bories, Microservices Architecture: Principles, Benefits, Challenges and Use 
Cases, Architecti.blog, 03.09.2025. URL: https://architecti.blog/en/articles/2025/009-l-
architecture-microservices--une-r%C3%A9volution-dans-la-conception-applicative/ (дата 
звернення: 12.11.2025). 
25. Work breakdown structure. Wikipedia. URL: 
https://en.wikipedia.org/wiki/Work_breakdown_structure (дата звернення: 18.11.2025). 
26. DOU Salary Survey. URL: https://jobs.dou.ua/salaries (дата звернення: 18.11.2025). 
27. ISO/IEC 25010. PORTAL ISO 25000. URL: https://iso25000.com/en/iso-25000-
standards/iso-25010 (дата звернення: 18.11.2025). 
28. Сидорук М.В., Григорова А.А. Концепція управління ризиком в IT-проєктах. 
Вісник Херсонського національного технічного університету, №4(91), 2024. С. 333–
341. URL: https://journals.kntu.kherson.ua/index.php/visnyk_kntu/article/view/813 (дата 
звернення: 18.11.2025). 
29. PMBOK Guide. URL: https://www.pmi.org/standards/pmbok (дата звернення: 
18.11.2025). 
30. ISO 31000:2018. URL: https://www.iso.org/standard/65694.html (дата звернення: 
18.11.2025). 
31. About Discord | Our Mission and Story. URL: https://discord.com/company (дата 
звернення: 18.11.2025). 
32. About Us: Trello History, Logos & Customers. URL: https://trello.com/about (дата 
звернення: 18.11.2025). 
33. About GitLab. URL: https://about.gitlab.com/company (дата звернення: 
18.11.2025). 
96 
 
34. About Postman. URL: https://www.postman.com/company/about-postman (дата 
звернення: 25.11.2025).  
97 
 
ДОДАТОК А 
 
 «Затверджую»               
Завідувач кафедри КНСА 
__________ проф. Юрій ТРИУС  
                                                                    «____»______________2025 р. 
 
 
 
 
 
 
УПРАВЛІННЯ ПРОЄКТОМ СТВОРЕННЯ ВЕБ-ОРІЄНТОВАНОГО 
ЗАСТОСУНКУ ДЛЯ РОЗВ’ЯЗУВАННЯ ОПТИМІЗАЦІЙНИХ ЗАДАЧ 
ЧИСЕЛЬНИМИ МЕТОДАМИ 
 
Специфікація  
482.ЧДТУ.52406-01 
 
Листів 2 
 
 
 
 
Розробник ____________________ Заєць В.М. 
Керівник ____________________  Триус Ю.В. 
 
 
 
 
 
 
Черкаси – 2025  
98 
 
482.ЧДТУ.52406-01 
Позначення Найменування Примітка 
   
   
 Документація  
   
482.ЧДТУ.52406-01 12 01 Текст програми  
482.ЧДТУ.52406-01 34 01 Інструкція користувачеві  
482.ЧДТУ.52406-01 91 01 Публікації з теми  
кваліфікаційної роботи 
магістра 
   
   
   
   
   
   
   
   
   
   
   
   
   
  
99 
 
ДОДАТОК Б 
 
 
 
 
 
 
 
 
 
УПРАВЛІННЯ ПРОЄКТОМ СТВОРЕННЯ ВЕБ-ОРІЄНТОВАНОГО 
ЗАСТОСУНКУ ДЛЯ РОЗВ’ЯЗУВАННЯ ОПТИМІЗАЦІЙНИХ ЗАДАЧ 
ЧИСЕЛЬНИМИ МЕТОДАМИ 
 
Текст програми  
482.ЧДТУ.52406-01 12 01 
 
Листів 39 
 
 
 
 
Розробник ____________________ Заєць В.М. 
Керівник ____________________  Триус Ю.В. 
 
 
 
 
 
 
Черкаси – 2025  
100 
 
У додатку наведено основний програмний код головних модулів та сторінок 
веб-орієнтованого застосунку для розв’язування оптимізаційних задач чисельними 
методами (фрагмент). 
Б.1 contract.json 
Фрагмент JSON-контракту, в якому прописані методи оптимізації, їх параметри 
та тестові фуккції, для генерації динамічного та актуального інтерфейсу: 
{ 
  "version": "1.0.0", 
  "i18n": { 
    "default_locale": "ua", 
    "locales": ["ua", "en"] 
  }, 
  "methods": [ 
    { 
      "class": {"ua": "Одновимірна Оптимізація", "en": "One Dimensional Optimization"}, 
      "name": {"ua": "Метод Бісекції (Дихотомії)", "en": "Bisection (Dichotomy) Method"}, 
      "variable": "dichotomy", 
      "description": {"ua": "Метод Бісекції (Дихотомії)", "en": "Bisection (Dichotomy) Method"}, 
      "input": [ 
        {"variable": "fun", "name": {"ua": "Цільова функція (f)", "en": "Objective function (f)"}, "type": "text", "required": true, 
"validate": true, "example": "1/2*pow(x,2)-sin(x)"}, 
        {"variable": "x_min", "name": {"ua": "Початок інтервалу (a)", "en": "Interval start (a)"}, "type": "number", "required": 
true, "min": -1e+308, "max": 1e+308, "example": -1}, 
        {"variable": "x_max", "name": {"ua": "Кінець інтервалу (b)", "en": "Interval end (b)"}, "type": "number", "required": 
true, "min": -1e+308, "max": 1e+308, "example": 1}, 
        {"variable": "ek", "name": {"ua": "Точність обчислень (e) або Кількість необхідних ітерацій (k)", "en": "Accuracy or 
number of iterations"}, "type": "number", "required": true, "min": -1e+308, "max": 1e+308, "example": 1.001e-8}, 
        {"variable": "best_key", "name": {"ua": "Вибір найкращого повторення за", "en": "Choose best repetitions by"}, 
"type": "selector", "mode_key": true, "default": "default", "selector": [ 
          {"name": {"ua": "значенням функції (f(x))", "en": "function value (f(x))"}, "value": "default"}, 
          {"name": {"ua": "точністю результату (e)", "en": "accuracy of the result (e)"}, "value": "e"}, 
          {"name": {"ua": "кількістю ітерацій (k)", "en": "number of iterations (k)"}, "value": "k"}, 
          {"name": {"ua": "кількістю обчислень значення функції (n)", "en": "number of function value calculations (n)"}, 
"value": "n"} 
        ]}, 
        {"variable": "mode", "name": {"ua": "Критерій оптимізації", "en": "Optimization criterion"}, "type": "selector", 
"default": "min", "selector": [ 
          {"name": {"ua": "Мінімізація", "en": "Minimize"}, "value": "min"}, 
          {"name": {"ua": "Максимізація", "en": "Maximize"}, "value": "max"} 
101 
 
        ]} 
      ], 
      "functions": [21,22,23,24,25,26,27,28] 
    }, 
    { 
      "class": {"ua": "Одновимірна Оптимізація", "en": "One Dimensional Optimization"}, 
      "name": {"ua": "Метод Золотого Перерізу", "en": "Golden-Section Method"}, 
      "variable": "golden", 
      "description": {"ua": "Метод Золотого Перерізу", "en": "Golden-Section Method"}, 
      "input": [ 
        {"variable": "fun", "name": {"ua": "Цільова функція (f)", "en": "Objective function (f)"}, "type": "text", "required": true, 
"validate": true, "example": "1/2*pow(x,2)-sin(x)"}, 
        {"variable": "x_min", "name": {"ua": "Початок інтервалу (a)", "en": "Interval start (a)"}, "type": "number", "required": 
true, "min": -1e+308, "max": 1e+308, "example": -1}, 
        {"variable": "x_max", "name": {"ua": "Кінець інтервалу (b)", "en": "Interval end (b)"}, "type": "number", "required": 
true, "min": -1e+308, "max": 1e+308, "example": 1}, 
        {"variable": "ek", "name": {"ua": "Точність обчислень (e) або Кількість необхідних ітерацій (k)", "en": "Accuracy or 
number of iterations"}, "type": "number", "required": true, "min": -1e+308, "max": 1e+308, "example": 1.001e-8}, 
        {"variable": "best_key", "name": {"ua": "Вибір найкращого повторення за", "en": "Choose best repetitions by"}, 
"type": "selector", "mode_key": true, "default": "default", "selector": [ 
          {"name": {"ua": "значенням функції (f(x))", "en": "function value (f(x))"}, "value": "default"}, 
          {"name": {"ua": "точністю результату (e)", "en": "accuracy of the result (e)"}, "value": "e"}, 
          {"name": {"ua": "кількістю ітерацій (k)", "en": "number of iterations (k)"}, "value": "k"}, 
          {"name": {"ua": "кількістю обчислень значення функції (n)", "en": "number of function value calculations (n)"}, 
"value": "n"} 
          ]}, 
        {"variable": "mode", "name": {"ua": "Критерій оптимізації", "en": "Optimization criterion"}, "type": "selector", 
"default": "min", "selector": [ 
          {"name": {"ua": "Мінімізація", "en": "Minimize"}, "value": "min"}, 
          {"name": {"ua": "Максимізація", "en": "Maximize"}, "value": "max"} 
          ]} 
      ], 
      "functions": [21,22,23,24,25,26,27,28] 
    }, 
    { 
      "class": {"ua": "Одновимірна Оптимізація", "en": "One Dimensional Optimization"}, 
      "name": {"ua": "Метод Фібоначчі", "en": "Fibonacci Method"}, 
      "variable": "fibonacci", 
      "description": {"ua": "Метод Фібоначчі", "en": "Fibonacci Method"}, 
      "input": [ 
102 
 
        {"variable": "fun", "name": {"ua": "Цільова функція (f)", "en": "Objective function (f)"}, "type": "text", "required": true, 
"validate": true, "example": "1/2*pow(x,2)-sin(x)"}, 
        {"variable": "x_min", "name": {"ua": "Початок інтервалу (a)", "en": "Interval start (a)"}, "type": "number", "required": 
true, "min": -1e+308, "max": 1e+308, "example": -1}, 
        {"variable": "x_max", "name": {"ua": "Кінець інтервалу (b)", "en": "Interval end (b)"}, "type": "number", "required": 
true, "min": -1e+308, "max": 1e+308, "example": 1}, 
        {"variable": "ek", "name": {"ua": "Точність обчислень (e) або Кількість необхідних ітерацій (k)", "en": "Accuracy or 
number of iterations"}, "type": "number", "required": true, "min": -1e+308, "max": 1e+308, "example": 1.001e-8}, 
        {"variable": "best_key", "name": {"ua": "Вибір найкращого повторення за", "en": "Choose best repetitions by"}, 
"type": "selector", "mode_key": true, "default": "default", "selector": [ 
          {"name": {"ua": "значенням функції (f(x))", "en": "function value (f(x))"}, "value": "default"}, 
          {"name": {"ua": "точністю результату (e)", "en": "accuracy of the result (e)"}, "value": "e"}, 
          {"name": {"ua": "кількістю ітерацій (k)", "en": "number of iterations (k)"}, "value": "k"}, 
          {"name": {"ua": "кількістю обчислень значення функції (n)", "en": "number of function value calculations (n)"}, 
"value": "n"} 
        ]}, 
        {"variable": "mode", "name": {"ua": "Критерій оптимізації", "en": "Optimization criterion"}, "type": "selector", 
"default": "min", "selector": [ 
          {"name": {"ua": "Мінімізація", "en": "Minimize"}, "value": "min"}, 
          {"name": {"ua": "Максимізація", "en": "Maximize"}, "value": "max"} 
        ]} 
      ], 
      "functions": [21,22,23,24,25,26,27,28] 
    }, 
    { 
      "class": {"ua": "Одновимірна Оптимізація", "en": "One Dimensional Optimization"}, 
      "name": {"ua": "Метод Парабол", "en": "Parabolic Interpolation"}, 
      "variable": "parabola", 
      "description": {"ua": "Метод Парабол", "en": "Parabolic Interpolation"}, 
      "input": [ 
        {"variable": "fun", "name": {"ua": "Цільова функція (f)", "en": "Objective function (f)"}, "type": "text", "required": true, 
"validate": true, "example": "1/2*pow(x,2)-sin(x)"}, 
        {"variable": "x_min", "name": {"ua": "Початок інтервалу (a)", "en": "Interval start (a)"}, "type": "number", "required": 
true, "min": -1e+308, "max": 1e+308, "example": -1}, 
        {"variable": "x_max", "name": {"ua": "Кінець інтервалу (b)", "en": "Interval end (b)"}, "type": "number", "required": 
true, "min": -1e+308, "max": 1e+308, "example": 1}, 
        {"variable": "ek", "name": {"ua": "Точність обчислень (e) або Кількість необхідних ітерацій (k)", "en": "Accuracy or 
number of iterations"}, "type": "number", "required": true, "min": -1e+308, "max": 1e+308, "example": 1.001e-8}, 
        {"variable": "best_key", "name": {"ua": "Вибір найкращого повторення за", "en": "Choose best repetitions by"}, 
"type": "selector", "mode_key": true, "default": "default", "selector": [ 
          {"name": {"ua": "значенням функції (f(x))", "en": "function value (f(x))"}, "value": "default"}, 
103 
 
          {"name": {"ua": "точністю результату (e)", "en": "accuracy of the result (e)"}, "value": "e"}, 
          {"name": {"ua": "кількістю ітерацій (k)", "en": "number of iterations (k)"}, "value": "k"}, 
          {"name": {"ua": "кількістю обчислень значення функції (n)", "en": "number of function value calculations (n)"}, 
"value": "n"} 
        ]}, 
        {"variable": "mode", "name": {"ua": "Критерій оптимізації", "en": "Optimization criterion"}, "type": "selector", 
"default": "min", "selector": [ 
          {"name": {"ua": "Мінімізація", "en": "Minimize"}, "value": "min"}, 
          {"name": {"ua": "Максимізація", "en": "Maximize"}, "value": "max"} 
        ]} 
      ], 
      "functions": [21,22,23,24,25,26,27,28] 
    }, 
    ... 
 
    ... 
    { 
      "class": {"ua": "Глобальна Оптимізація", "en": "Global Optimization"}, 
      "name": {"ua": "PSO (Класичний)", "en": "PSO (Classic)"}, 
      "variable": "pso_classic", 
      "description": {"ua": "Класичний Ройовий Алгоритм.", "en": "Classic Particle Swarm Optimization."}, 
      "input": [ 
        {"variable": "fun", "name": {"ua": "Цільова функція (f)", "en": "Objective function (f)"}, "type": "text", "required": true, 
"validate": true}, 
        {"variable": "d", "name": {"ua": "Розмірність (d)", "en": "Dimensions (d)"}, "type": "number", "required": true, "min": 1, 
"max": 50, "example": 2}, 
        {"variable": "s", "name": {"ua": "Кількість частинок (s)", "en": "Number of particles (s)"}, "type": "number", 
"required": true, "min": 2, "max": 1e+3, "example": 10}, 
        {"variable": "e", "name": {"ua": "Точність (e)", "en": "Accuracy (e)"}, "type": "number", "required": true, "min": 1e-308, 
"max": 1e+308, "example": 1.001e-8}, 
        {"variable": "k", "name": {"ua": "Кількість ітерацій (k)", "en": "Number of  iterations (k)"}, "type": "number", 
"required": true, "min": 1, "max": 1e+6, "example": 1000}, 
        {"variable": "x_min", "name": {"ua": "Мінімальні координати (x_min)", "en": "Min coordinates (x_min)"}, "type": 
"array", "elements": "number", "numberOrigin": "d", "universal": true, "required": true, "min": -1e+308, "max": 1e+308, 
"example": -10}, 
        {"variable": "x_max", "name": {"ua": "Максимальні координати (x_max)", "en": "Max coordinates (x_max)"}, "type": 
"array", "elements": "number", "numberOrigin": "d", "universal": true, "required": true, "min": -1e+308, "max": 1e+308, 
"example": 10}, 
        {"variable": "w", "name": {"ua": "Вага інерції (w)", "en": "Inertia weight (w)"}, "type": "number", "required": false, 
"min": -1e+6, "max": 1e+6, "example": 1.66096404744}, 
104 
 
        {"variable": "c1", "name": {"ua": "Когнітивний коефіцієнтт (c1)", "en": "Cognitive coefficient (c1)"}, "type": 
"number", "required": false, "min": -1e+6, "max": 1e+6, "example": 2}, 
        {"variable": "c2", "name": {"ua": "Соціальний коефіцієнт (c2)", "en": "Social coefficient (c2)"}, "type": "number", 
"required": false, "min": -1e+6, "max": 1e+6, "example": 2}, 
        {"variable": "best_key", "name": {"ua": "Вибір найкращого повторення за", "en": "Choose best repetitions by"}, 
"type": "selector", "mode_key": true, "default": "default", "selector": [ 
          {"name": {"ua": "значенням функції (f(x))", "en": "function value (f(x))"}, "value": "default"}, 
          {"name": {"ua": "точністю результату (e)", "en": "accuracy of the result (e)"}, "value": "e"}, 
          {"name": {"ua": "кількістю ітерацій (k)", "en": "number of iterations (k)"}, "value": "k"}, 
          {"name": {"ua": "кількістю обчислень значення функції (n)", "en": "number of function value calculations (n)"}, 
"value": "n"} 
        ]}, 
        {"variable": "mode", "name": {"ua": "Критерій оптимізації", "en": "Optimization criterion"}, "type": "selector", 
"default": "min", "selector": [ 
          {"name": {"ua": "Мінімізація", "en": "Minimize"}, "value": "min"}, 
          {"name": {"ua": "Максимізація", "en": "Maximize"}, "value": "max"} 
          ]} 
      ], 
      "functions": [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] 
    }, 
    { 
      "class": {"ua": "Глобальна Оптимізація", "en": "Global Optimization"}, 
      "name": {"ua": "PSO (Стандартний)", "en": "PSO (Standard)"}, 
      "variable": "pso_standard", 
      "description": {"ua": "Стандартний Ройовий Алгоритм.", "en": "Standard Particle Swarm Optimization."}, 
      "input": [ 
        {"variable": "fun", "name": {"ua": "Цільова функція (f)", "en": "Objective function (f)"}, "type": "text", "required": true, 
"validate": true}, 
        {"variable": "d", "name": {"ua": "Розмірність (d)", "en": "Dimensions (d)"}, "type": "number", "required": true, "min": 1, 
"max": 50, "example": 2}, 
        {"variable": "s", "name": {"ua": "Кількість частинок (s)", "en": "Number of particles (s)"}, "type": "number", 
"required": true, "min": 2, "max": 1e+3, "example": 10}, 
        {"variable": "e", "name": {"ua": "Точність (e)", "en": "Accuracy (e)"}, "type": "number", "required": true, "min": 1e-308, 
"max": 1e+308, "example": 1.001e-8}, 
        {"variable": "k", "name": {"ua": "Кількість ітерацій (k)", "en": "Number of  iterations (k)"}, "type": "number", 
"required": true, "min": 1, "max": 1e+6, "example": 1000}, 
        {"variable": "x_min", "name": {"ua": "Мінімальні координати (x_min)", "en": "Min coordinates (x_min)"}, "type": 
"array", "elements": "number", "numberOrigin": "d", "universal": true, "required": true, "min": -1e+308, "max": 1e+308, 
"example": -10}, 
105 
 
        {"variable": "x_max", "name": {"ua": "Максимальні координати (x_max)", "en": "Max coordinates (x_max)"}, "type": 
"array", "elements": "number", "numberOrigin": "d", "universal": true, "required": true, "min": -1e+308, "max": 1e+308, 
"example": 10}, 
        {"variable": "w", "name": {"ua": "Вага інерції (w)", "en": "Inertia weight (w)"}, "type": "number", "required": false, 
"min": -1e+6, "max": 1e+6, "example": 1.66096404744}, 
        {"variable": "c1", "name": {"ua": "Когнітивний коефіцієнтт (c1)", "en": "Cognitive coefficient (c1)"}, "type": 
"number", "required": false, "min": -1e+6, "max": 1e+6, "example": 2}, 
        {"variable": "c2", "name": {"ua": "Соціальний коефіцієнт (c2)", "en": "Social coefficient (c2)"}, "type": "number", 
"required": false, "min": -1e+6, "max": 1e+6, "example": 2}, 
        {"variable": "best_key", "name": {"ua": "Вибір найкращого повторення за", "en": "Choose best repetitions by"}, 
"type": "selector", "mode_key": true, "default": "default", "selector": [ 
          {"name": {"ua": "значенням функції (f(x))", "en": "function value (f(x))"}, "value": "default"}, 
          {"name": {"ua": "точністю результату (e)", "en": "accuracy of the result (e)"}, "value": "e"}, 
          {"name": {"ua": "кількістю ітерацій (k)", "en": "number of iterations (k)"}, "value": "k"}, 
          {"name": {"ua": "кількістю обчислень значення функції (n)", "en": "number of function value calculations (n)"}, 
"value": "n"} 
        ]}, 
        {"variable": "mode", "name": {"ua": "Критерій оптимізації", "en": "Optimization criterion"}, "type": "selector", 
"default": "min", "selector": [ 
          {"name": {"ua": "Мінімізація", "en": "Minimize"}, "value": "min"}, 
          {"name": {"ua": "Максимізація", "en": "Maximize"}, "value": "max"} 
          ]} 
      ], 
      "functions": [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] 
    }, 
    { 
      "class": {"ua": "Глобальна Оптимізація", "en": "Global Optimization"}, 
      "name": {"ua": "APSO 1", "en": "APSO 1"}, 
      "variable": "apso_1", 
      "description": {"ua": "Адаптивний PSO (Варіант 1).", "en": "Adaptive PSO (Variant 1)."}, 
      "input": [ 
        {"variable": "fun", "name": {"ua": "Цільова функція (f)", "en": "Objective function (f)"}, "type": "text", "required": true, 
"validate": true}, 
        {"variable": "d", "name": {"ua": "Розмірність (d)", "en": "Dimensions (d)"}, "type": "number", "required": true, "min": 1, 
"max": 50, "example": 2}, 
        {"variable": "s", "name": {"ua": "Кількість частинок (s)", "en": "Number of particles (s)"}, "type": "number", 
"required": true, "min": 2, "max": 1e+3, "example": 10}, 
        {"variable": "e", "name": {"ua": "Точність (e)", "en": "Accuracy (e)"}, "type": "number", "required": true, "min": 1e-308, 
"max": 1e+308, "example": 1.001e-8}, 
        {"variable": "k", "name": {"ua": "Кількість ітерацій (k)", "en": "Number of  iterations (k)"}, "type": "number", 
"required": true, "min": 1, "max": 1e+6, "example": 1000}, 
106 
 
        {"variable": "x_min", "name": {"ua": "Мінімальні координати (x_min)", "en": "Min coordinates (x_min)"}, "type": 
"array", "elements": "number", "numberOrigin": "d", "universal": true, "required": true, "min": -1e+308, "max": 1e+308, 
"example": -10}, 
        {"variable": "x_max", "name": {"ua": "Максимальні координати (x_max)", "en": "Max coordinates (x_max)"}, "type": 
"array", "elements": "number", "numberOrigin": "d", "universal": true, "required": true, "min": -1e+308, "max": 1e+308, 
"example": 10}, 
        {"variable": "w", "name": {"ua": "Вага інерції (w)", "en": "Inertia weight (w)"}, "type": "number", "required": false, 
"min": -1e+6, "max": 1e+6, "example": 1.66096404744}, 
        {"variable": "c1", "name": {"ua": "Когнітивний коефіцієнтт (c1)", "en": "Cognitive coefficient (c1)"}, "type": 
"number", "required": false, "min": -1e+6, "max": 1e+6, "example": 2}, 
        {"variable": "c2", "name": {"ua": "Соціальний коефіцієнт (c2)", "en": "Social coefficient (c2)"}, "type": "number", 
"required": false, "min": -1e+6, "max": 1e+6, "example": 2}, 
        {"variable": "best_key", "name": {"ua": "Вибір найкращого повторення за", "en": "Choose best repetitions by"}, 
"type": "selector", "mode_key": true, "default": "default", "selector": [ 
          {"name": {"ua": "значенням функції (f(x))", "en": "function value (f(x))"}, "value": "default"}, 
          {"name": {"ua": "точністю результату (e)", "en": "accuracy of the result (e)"}, "value": "e"}, 
          {"name": {"ua": "кількістю ітерацій (k)", "en": "number of iterations (k)"}, "value": "k"}, 
          {"name": {"ua": "кількістю обчислень значення функції (n)", "en": "number of function value calculations (n)"}, 
"value": "n"} 
        ]}, 
        {"variable": "mode", "name": {"ua": "Критерій оптимізації", "en": "Optimization criterion"}, "type": "selector", 
"default": "min", "selector": [ 
          {"name": {"ua": "Мінімізація", "en": "Minimize"}, "value": "min"}, 
          {"name": {"ua": "Максимізація", "en": "Maximize"}, "value": "max"} 
        ]} 
      ], 
      "functions": [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] 
    }, 
    { 
      "class": {"ua": "Глобальна Оптимізація", "en": "Global Optimization"}, 
      "name": {"ua": "APSO 2", "en": "APSO 2"}, 
      "variable": "apso_2", 
      "description": {"ua": "Адаптивний PSO (Варіант 2).", "en": "Adaptive PSO (Variant 2)."},  
      "input": [ 
        {"variable": "fun", "name": {"ua": "Цільова функція (f)", "en": "Objective function (f)"}, "type": "text", "required": true, 
"validate": true}, 
        {"variable": "d", "name": {"ua": "Розмірність (d)", "en": "Dimensions (d)"}, "type": "number", "required": true, "min": 1, 
"max": 50, "example": 2}, 
        {"variable": "s", "name": {"ua": "Кількість частинок (s)", "en": "Number of particles (s)"}, "type": "number", 
"required": true, "min": 2, "max": 1e+3, "example": 10}, 
107 
 
        {"variable": "e", "name": {"ua": "Точність (e)", "en": "Accuracy (e)"}, "type": "number", "required": true, "min": 1e-308, 
"max": 1e+308, "example": 1.001e-8}, 
        {"variable": "k", "name": {"ua": "Кількість ітерацій (k)", "en": "Number of  iterations (k)"}, "type": "number", 
"required": true, "min": 1, "max": 1e+6, "example": 1000}, 
        {"variable": "x_min", "name": {"ua": "Мінімальні координати (x_min)", "en": "Min coordinates (x_min)"}, "type": 
"array", "elements": "number", "numberOrigin": "d", "universal": true, "required": true, "min": -1e+308, "max": 1e+308, 
"example": -10}, 
        {"variable": "x_max", "name": {"ua": "Максимальні координати (x_max)", "en": "Max coordinates (x_max)"}, "type": 
"array", "elements": "number", "numberOrigin": "d", "universal": true, "required": true, "min": -1e+308, "max": 1e+308, 
"example": 10}, 
        {"variable": "c1", "name": {"ua": "Когнітивний коефіцієнтт (c1)", "en": "Cognitive coefficient (c1)"}, "type": 
"number", "required": false, "min": -1e+6, "max": 1e+6, "example": 2}, 
        {"variable": "c2", "name": {"ua": "Соціальний коефіцієнт (c2)", "en": "Social coefficient (c2)"}, "type": "number", 
"required": false, "min": -1e+6, "max": 1e+6, "example": 2}, 
        {"variable": "best_key", "name": {"ua": "Вибір найкращого повторення за", "en": "Choose best repetitions by"}, 
"type": "selector", "mode_key": true, "default": "default", "selector": [ 
          {"name": {"ua": "значенням функції (f(x))", "en": "function value (f(x))"}, "value": "default"}, 
          {"name": {"ua": "точністю результату (e)", "en": "accuracy of the result (e)"}, "value": "e"}, 
          {"name": {"ua": "кількістю ітерацій (k)", "en": "number of iterations (k)"}, "value": "k"}, 
          {"name": {"ua": "кількістю обчислень значення функції (n)", "en": "number of function value calculations (n)"}, 
"value": "n"} 
        ]}, 
        {"variable": "mode", "name": {"ua": "Критерій оптимізації", "en": "Optimization criterion"}, "type": "selector", 
"default": "min", "selector": [ 
          {"name": {"ua": "Мінімізація", "en": "Minimize"}, "value": "min"}, 
          {"name": {"ua": "Максимізація", "en": "Maximize"}, "value": "max"} 
          ]} 
      ], 
      "functions": [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] 
    } 
  ], 
  "functions": [ 
    {"id": 1, "name": {"ua": "Сферична", "en": "Sphere"}, "expression": "sigma(i, d, x(i)**2)", "doc_url": 
"https://www.sfu.ca/~ssurjano/spheref.html"}, 
    {"id": 2, "name": {"ua": "Еліптична", "en": "Elliptic"}, "expression": "sigma(i, d, pow(pow(10, 6), ((i-1)/(d-1)))*pow(x(i), 
2))"}, 
    {"id": 3, "name": {"ua": "Обернена Гіпер-Еліпсоїдна", "en": "Rotated Hyper-Ellipsoid"}, "expression": "sigma(i, d, 
sigma(j, i, pow(x(j), 2)))", "doc_url": "https://www.sfu.ca/~ssurjano/rothyp.html"}, 
    {"id": 4, "name": {"ua": "Розенброка", "en": "Rosenbrock"}, "expression": "sigma(i, d-1, 100*pow(x(i+1) - pow(x(i), 2), 2) 
+ pow(1 - x(i), 2))", "doc_url": "https://www.sfu.ca/~ssurjano/rosen.html"}, 
108 
 
    {"id": 5, "name": {"ua": "Расстрігіна", "en": "Rastrigin"}, "expression": "sigma(i, d, (pow(x(i), 2) - 
10*cos(2*pi*x(i)))+10)", "doc_url": "https://www.sfu.ca/~ssurjano/rastr.html"}, 
    {"id": 6, "name": {"ua": "Грівонка", "en": "Griewank"}, "expression": "(1/4000)*sigma(i, d, pow(x(i), 2)) - prod(i, d, 
cos(x(i)/sqrt(i))) + 1", "doc_url": "https://www.sfu.ca/~ssurjano/griewank.html"}, 
    {"id": 7, "name": {"ua": "Алпайна", "en": "Alpine"}, "expression": "sigma(i, d, abs(x(i)*sin(x(i))+0.1*x(i)))", "doc_url": 
"https://www.al-roomi.org/benchmarks/unconstrained/n-dimensions/162-alpine-function-no-1"}, 
    {"id": 8, "name": {"ua": "Швефела", "en": "Schwefel"}, "expression": "418.9829*d - sigma(i, d, x(i)*sin(sqrt(abs(x(i)))))", 
"doc_url": "https://www.sfu.ca/~ssurjano/schwef.html"}, 
    {"id": 9, "name": {"ua": "Швефела 1.2", "en": "Schwefel 1.2"}, "expression": "sigma(i, d, pow(sigma(j, i, x(j)), 2))", 
"doc_url": "https://al-roomi.org/component/content/article?id=188:schwefel-s-function-no-1-2-double-sum-or-rotated-hyper-
ellipsoid-function"}, 
    {"id": 10, "name": {"ua": "Аклея", "en": "Ackley"}, "expression": "-20*exp(-0.2*sqrt(1/d*sigma(i, d, pow(x(i), 2))))-
exp(1/d*sigma(i, d, cos(2*pi*x(i))))+20+e", "doc_url": "https://www.sfu.ca/~ssurjano/ackley.html"}, 
    {"id": 11, "name": {"ua": "Вейєрштрасса", "en": "Weierstrass"}, "expression": "(1/d)*sigma(i, d, sigma(k, 21, pow(0.5, k-
1)*cos(2*pi*pow(3, k-1)*(x(i)+0.5))))-sigma(k, 21, pow(0.5, k-1)*cos(pi*pow(3, k-1)))", "doc_url": 
"https://en.wikipedia.org/wiki/Weierstrass_function"}, 
    {"id": 12, "name": {"ua": "Міхалевича", "en": "Michalewicz"}, "expression": "-sigma(i, d, sin(x(i))*pow(sin(i*pow(x(i), 
2)/pi), 20))", "doc_url": "https://www.sfu.ca/~ssurjano/michal.html"}, 
    {"id": 13, "name": {"ua": "Стиблінського–Танга", "en": "Styblinski-Tang"}, "expression": "1/2*sigma(i, d, pow(x(i), 4)-
16*pow(x(i), 2)+5*x(i))", "doc_url": "https://www.sfu.ca/~ssurjano/stybtang.html"}, 
    {"id": 14, "name": {"ua": "Захарова", "en": "Zakharov"}, "expression": "sigma(i, d, pow(x(i), 2)) + pow(sigma(i, d, 
0.5*i*x(i)), 2) + pow(sigma(i, d, 0.5*i*x(i)), 4)", "doc_url": "https://www.sfu.ca/~ssurjano/zakharov.html"}, 
    {"id": 15, "name": {"ua": "Перм", "en": "Perm"}, "expression": "sigma(i, d, pow(sigma(j, d, (pow(j, i)+0.5)*(pow((x(j)/j), 
i)-1)), 2))", "doc_url": "https://www.sfu.ca/~ssurjano/permdb.html"}, 
    {"id": 16, "name": {"ua": "Перм 0", "en": "Perm 0"}, "expression": "sigma(i, d, pow(sigma(j, d, (j+0.5)*(pow(x(j), i)-
1/pow(j, i))), 2))", "doc_url": "https://www.sfu.ca/~ssurjano/perm0db.html"}, 
    {"id": 17, "name": {"ua": "Сума Різних Степенів", "en": "Sum of Different Powers"}, "expression": "sigma(i, d, 
pow(abs(x(i)), (i+1)))", "doc_url": "https://www.sfu.ca/~ssurjano/sumpow.html"}, 
    {"id": 18, "name": {"ua": "Трид", "en": "Trid"}, "expression": "sigma(i, d, pow(x(i)-1, 2))-sigma(i, d-1, x(i+1)*x(i))", 
"doc_url": "https://www.sfu.ca/~ssurjano/trid.html"}, 
    {"id": 19, "name": {"ua": "Діксона-Прайса", "en": "Dixon-Price"}, "expression": "pow(x(1)-1, 2) + sigma(i, d-1, 
pow(2*pow(x(i+1), 2)-x(i), 2))", "doc_url": "https://www.sfu.ca/~ssurjano/dixonpr.html"}, 
    {"id": 20, "name": {"ua": "Зсунута проблема Швефеля", "en": "Shifted Schwefel's Problem"}, "expression": "sigma(i, d, 
abs(x(i))) + prod(i, d, abs(x(i)))"}, 
 
    {"id": 21, "name": {"ua": "Квадратична", "en": "Quadratic"}, "description": {"ua": "Квадрат аргументу", "en": "Square of 
argument"}, "expression": "x*x", "doc_url": ""}, 
    {"id": 22, "name": {"ua": "Квадратична+синус", "en": "Quadratic+sin"}, "description": {"ua": "Приклад 1D", "en": 
"Example 1D"}, "expression": "1/2*pow(x,2)-sin(x)", "doc_url": ""}, 
    {"id": 23, "name": {"ua": "Зміщена квадратична", "en": "Shifted quadratic"}, "description": {"ua": "(x-2)^2 + 1", "en": 
"(x-2)^2 + 1"}, "expression": "pow(x-2,2)+1", "doc_url": ""}, 
109 
 
    {"id": 24, "name": {"ua": "Модуль", "en": "Absolute value"}, "description": {"ua": "|x|", "en": "|x|"}, "expression": 
"abs(x)", "doc_url": ""}, 
    {"id": 25, "name": {"ua": "Косинусна долина", "en": "Cosine valley"}, "description": {"ua": "1-cos(x)+0.1x^2", "en": "1-
cos(x)+0.1x^2"}, "expression": "1-cos(x)+0.1*pow(x,2)", "doc_url": ""}, 
    {"id": 26, "name": {"ua": "Синусна чаша", "en": "Sine bowl"}, "description": {"ua": "x*sin(x)+0.1x^2", "en": 
"x*sin(x)+0.1x^2"}, "expression": "x*sin(x)+0.1*pow(x,2)", "doc_url": ""}, 
    {"id": 27, "name": {"ua": "Експоненційна", "en": "Exponential"}, "description": {"ua": "(x-1)exp(x)-exp(1)", "en": "(x-
1)exp(x)-exp(1)"}, "expression": "(x-1)*exp(x)-exp(1)", "doc_url": ""}, 
    {"id": 28, "name": {"ua": "Квартічна", "en": "Quartic"}, "description": {"ua": "x^4-16x^2+5x", "en": "x^4-16x^2+5x"}, 
"expression": "pow(x,4)-16*pow(x,2)+5*x", "doc_url": ""} 
  ] 
} 
 
Б.2 solver-form-component.html 
HTML-код компоненту сторінки вибору методів та форми введення параметрів 
задачі на основі JSON-контракту, отриманого з сервісу обчислень: 
<section class="mb-4"> 
  <h2 class="text-2xl font-bold mb-2">{{ method.name[settings.locale()] || method.name.en }}</h2> 
  <p class="text-base text-gray-400">{{ method.description[settings.locale()] || method.description.en }}</p> 
</section> 
<form class="p-3 w-120 rounded-xl" [formGroup]="dynamicForm" (ngSubmit)="onSubmit()"> 
  @for (input of method.input; track input.variable) { 
    @if (shouldShowField(input)) { 
      <div class="mb-3"><label [for]="input.variable" class="block dark:text-gray-400 text-sm font-medium text-gray-700 mb-
1"> 
        {{ input.name[settings.locale()] || input.name.en }} 
        @if (input.required) { 
          <span class="text-red-600">*</span> 
        } 
      </label> 
        @switch (input.type) { 
          @case ('text') { 
            <input type="text" 
                   class="block dark:bg-[#13132b] w-full border rounded-md p-2 border-gray-500 shadow-sm focus:border-indigo-
500 focus:ring-indigo-500 sm:text-sm" 
                   [formControlName]="input.variable" 
                   [id]="input.variable" 
                   [placeholder]="input.example?.toString ?? ''"> 
            @if (input.variable === 'fun' && availableFunctions.length > 0) { 
              <div class="mt-2"> 
110 
 
                <label class="block text-xs font-medium text-gray-500 mb-1"> 
                  {{ 'FORM.TEST_FUNCTION_HELPER' | translate }} 
                </label> 
                <select (change)="onTestFunctionSelect($event)" 
                        class="block dark:bg-[#13132b] w-full border rounded-md p-2 border-gray-500 shadow-sm focus:border-
indigo-500 focus:ring-indigo-500 sm:text-sm text-gray-400"> 
                  <option value="">{{ 'FORM.MANUAL_INPUT' | translate }}</option> 
                  @for (func of availableFunctions; track func.id) { 
                    <option [value]="func.expression"> 
                      {{ func.name[settings.locale()] || func.name.en }} 
                    </option> 
                  } 
                </select> 
              </div> 
            } 
          } 
          @case ('number') { 
            <input type="number" 
                   class="block dark:bg-[#13132b] w-full border rounded-md p-2 border-gray-500 shadow-sm focus:border-indigo-
500 focus:ring-indigo-500 sm:text-sm" 
                   [formControlName]="input.variable" 
                   [id]="input.variable" 
                   [placeholder]="input.example?.toString ?? ''"> 
          } 
          @case ('selector') { 
            <select [formControlName]="input.variable" 
                    [id]="input.variable" 
                    class="block w-full dark:bg-[#13132b] border rounded-md p-2 border-gray-500 shadow-sm focus:border-indigo-
500 focus:ring-indigo-500 sm:text-sm"> 
              @for (opt of input.selector; track opt.value) { 
                <option [value]="opt.value"> 
                  {{ opt.name[settings.locale()] || opt.name.en }} 
                </option> 
              } 
            </select> 
          } 
          @case ('array') { 
            @if (input.universal) { 
              <div class="flex items-center mb-2"> 
                <input [id]="input.variable + '_universal'" 
                       [formControlName]="input.variable + '_universal'" 
111 
 
                       type="checkbox" 
                       class="h-4 w-4 dark:bg-[#13132b] rounded border-gray-300 text-indigo-600 focus:ring-indigo-500"> 
                <label [for]="input.variable + '_universal'" class="ml-2 dark:text-gray-400 block text-sm text-gray-900"> 
                  {{ 'FORM.FLAG_TITLE' | translate }} 
                </label> 
              </div> 
            } 
            <div [formArrayName]="input.variable"> 
              @for (control of getFormArrayControls(input.variable); track i; let i = $index) { 
                <div class="flex rounded-md shadow-sm mb-1"> 
                  <span 
                    class="inline-flex dark:bg-[#13132b] items-center px-3 rounded-l-md border border-r-0 p-2 border-gray-500 bg-
gray-50 text-gray-400 sm:text-sm "> 
                    @if (dynamicForm.get(input.variable + '_universal')?.value) { 
                      {{ 'FORM.VALUE' | translate }} 
                    } @else { 
                      x{{ i + 1 }} 
                    } 
                  </span> 
                  <input type="number" 
                         class="block w-full dark:bg-[#13132b] border flex-1 rounded-none rounded-r-md p-2 border-gray-500 
focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm" 
                         [formControlName]="i"> 
                </div> 
              } 
            </div> 
          } 
        } 
      </div> 
    } 
  } 
  <div class="mb-3"> 
    <label for="figure_n" class="block dark:text-gray-400 text-sm font-medium text-gray-700 mb-1"> 
      {{ 'FORM.PLOT_POINTS' | translate }} 
      <span class="text-red-600">*</span> 
      <span class="ml-1 text-gray-400 cursor-pointer" 
            title="This value will be used as the grid density per axis for the function plot, only when such a plot is possible.">ⓘ
</span> 
    </label> 
    <input 
      type="number" 
112 
 
      id="figure_n" 
      class="block w-full dark:bg-[#13132b] rounded-md border p-2 border-gray-500 shadow-sm focus:border-indigo-500 
focus:ring-indigo-500 sm:text-sm" 
      formControlName="figure_n" 
      placeholder="20" 
    > 
  </div> 
  <div class="mb-3"> 
    <label for="runs_number" class="block dark:text-gray-400 text-sm font-medium text-gray-700 mb-1"> 
      {{ 'FORM.RUNS' | translate }} 
      <span class="text-red-600">*</span> 
    </label> 
    <input 
      type="number" 
      id="runs_number" 
      class="block w-full dark:bg-[#13132b] rounded-md border p-2 border-gray-500 shadow-sm focus:border-indigo-500 
focus:ring-indigo-500 sm:text-sm" 
      formControlName="runs_number" 
      placeholder="10" 
    > 
    @if (dynamicForm.get('runs_number')?.invalid && dynamicForm.get('runs_number')?.touched) { 
    } 
  </div> 
  <div class="flex items-center w-200 flex-row gap-4"> 
    @if (isLoading) { 
      <button type="button" 
              (click)="cancelForm.emit()" 
              class="inline-flex w-fit justify-center py-2 px-4 rounded-md shadow-sm font-medium bg-red-600 text-white 
hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500"> 
        <span class="inline-block animate-spin rounded-full h-4 w-4 border-2 border-transparent border-t-white mr-2" 
              role="status"></span> 
        <span>{{ 'FORM.CANCEL_BTN' | translate }}</span> 
      </button> 
    } @else { 
      <button type="submit" 
              class="inline-flex dark:bg-[#00949e] w-fit justify-center py-2 px-4 rounded-md shadow-sm font-medium bg-emerald-
600 text-white hover:bg-emerald-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-emerald-500 
disabled:opacity-50 disabled:cursor-not-allowed"> 
        <span>{{ 'FORM.OPTIMIZE_BTN' | translate }}</span> 
      </button> 
    } 
113 
 
    @if (wsMessage; as msg) { 
      <div class="font-medium text-center my-4 whitespace-nowrap flex-shrink-0"> 
        {{ msg.key | translate : msg.params }} 
      </div> 
    } 
  </div> 
  @if (wsError; as error) { 
    <div class="font-medium text-center my-4 whitespace-nowrap text-red-600 flex-shrink-0"> 
      {{ error.key | translate : error.params }} 
    </div> 
  } 
</form> 
 
Б.3 AuthController.java 
Текст програми основного класу-контролеру сервісу безпеки для обробки 
запитів на визначені ендпоінти та передачі логіки виконання далі, на класи-сервіси: 
package com.optifind.controller; 
 
import com.optifind.api.AuthApi; 
import com.optifind.dto.ChangeEmailRequest; 
import com.optifind.dto.ChangeNameRequest; 
import com.optifind.dto.ChangePasswordRequest; 
import com.optifind.dto.ForgotPasswordRequest; 
import com.optifind.dto.JwtResponse; 
import com.optifind.dto.MessageResponse; 
import com.optifind.dto.RefreshTokenRequest; 
import com.optifind.dto.RefreshTokenResponse; 
import com.optifind.dto.ResetPasswordRequest; 
import com.optifind.dto.SigninRequest; 
import com.optifind.dto.SignupRequest; 
import com.optifind.dto.UserResponse; 
import com.optifind.dto.VerifyEmailRequest; 
import com.optifind.model.EAuthProvider; 
import com.optifind.service.AuthService; 
import lombok.AllArgsConstructor; 
import org.springframework.security.access.prepost.PreAuthorize; 
import org.springframework.web.bind.annotation.CrossOrigin; 
import org.springframework.web.bind.annotation.RestController; 
 
@CrossOrigin(origins = "*", maxAge = 3600) 
114 
 
@RestController 
@AllArgsConstructor 
public class AuthController implements AuthApi { 
    private final AuthService authService; 
 
    @Override 
    public MessageResponse registerUser(SignupRequest request) { 
        return authService.registerUser(request, EAuthProvider.AUTH_PROVIDER_LOCAL); 
    } 
 
    @Override 
    public JwtResponse authenticateUser(SigninRequest request) { 
        return authService.authenticateUser(request, EAuthProvider.AUTH_PROVIDER_LOCAL); 
    } 
 
    @PreAuthorize("isAuthenticated()") 
    @Override 
    public MessageResponse logoutUser() { 
        return authService.logoutUser(); 
    } 
 
    @Override 
    public RefreshTokenResponse refreshToken(RefreshTokenRequest request) { 
        return authService.refreshToken(request); 
    } 
 
    @PreAuthorize("isAuthenticated()") 
    @Override 
    public MessageResponse changeName(ChangeNameRequest request) { 
        return authService.changeName(request); 
    } 
 
    @PreAuthorize("isAuthenticated()") 
    @Override 
    public MessageResponse changePassword(ChangePasswordRequest request) { 
        return authService.changePassword(request); 
    } 
 
    @Override 
    public MessageResponse forgotPassword(ForgotPasswordRequest request) { 
        return authService.forgotPassword(request); 
115 
 
    } 
 
    @Override 
    public MessageResponse resetPassword(ResetPasswordRequest request) { 
        return authService.resetPassword(request); 
    } 
 
    @Override 
    public MessageResponse verifyEmail(VerifyEmailRequest request) { 
        return authService.verifyEmail(request); 
    } 
 
    @PreAuthorize("isAuthenticated()") 
    @Override 
    public MessageResponse changeEmail(ChangeEmailRequest request) { 
        return authService.changeEmail(request); 
    } 
 
    @PreAuthorize("isAuthenticated()") 
    @Override 
    public UserResponse getUserResponseByToken() { 
        return authService.getCurrentUserResponse(); 
    } 
} 
 
Б.4 main.py 
Текст програми основного файлу сервісу обчислень для обробки запитів на 
визначені ендпоінти та обробки переданих паратметрів: 
import asyncio 
import multiprocessing 
import json 
import logging 
import queue as queue_mod 
 
from fastapi import FastAPI, HTTPException, WebSocket, WebSocketDisconnect 
from fastapi.middleware.cors import CORSMiddleware 
from importlib import import_module 
from typing import Dict, Any 
 
from auth.dependencies import decode_jwt_from_authorization 
116 
 
from optimization.tools.param_utils import validate_function_params 
from optimization.tools.graph_utils import build_function_graph 
from optimization.tools.result_builder import build_result 
 
 
logger = logging.getLogger(__name__) 
 
 
app = FastAPI() 
 
allow_origins = [ 
    # "http://localhost:4200", 
    # "http://localhost", 
    "*"  # temporarily allow any origin 
] 
 
app.add_middleware( 
    CORSMiddleware, 
    allow_origins=allow_origins, 
    allow_credentials=True, 
    allow_methods=["*"], 
    allow_headers=["*"] 
) 
 
logging.getLogger("uvicorn.access").setLevel(logging.WARNING) 
logging.getLogger("websockets.server").setLevel(logging.WARNING) 
logging.getLogger("websockets.client").setLevel(logging.WARNING) 
 
active_tasks: Dict[str, Dict[str, Any]] = {} 
active_tasks_lock = asyncio.Lock() 
 
math_functions = [ 
    "cbrt", "exp", "exp2", "expm1", "log", "log1p", "log2", "log10", 
    "pow", "sqrt", "acos", "asin", "atan", "atan2", "cos", "dist", 
    "hypot", "sin", "tan", "fsum", "factorial", "pi", "tau", "inf", "nan", 
] 
creation_timeout = 10 
solving_timeout = 60 
solving_timeout_min = 30 
solving_timeout_max = 300 
role_timeout_multiplier_map = { 
117 
 
    "ROLE_USER": 1.0, 
    "ROLE_ADVANCED_USER": 2.0, 
    "ROLE_ADMIN": 5.0, 
} 
unknown_timeout_multiplier = 0.5 
 
 
def _solve_worker(method: str, parameters: dict, math_functions_: list, queue: multiprocessing.Queue): 
    """Run a single solve in a separate process and return raw result via queue. 
    This enables immediate termination by killing the process from the parent. 
    """ 
    try: 
        module = import_module(f"optimization.{method}") 
        # Support both sync and async solve functions 
        if asyncio.iscoroutinefunction(module.solve): 
            raw = asyncio.run(module.solve(**parameters, math_functions=math_functions_)) 
        else: 
            raw = module.solve(**parameters, math_functions=math_functions_) 
        queue.put({"ok": True, "raw": raw}) 
    except Exception as e: 
        logger.exception("Solve worker failed", extra={"method": method}) 
        try: 
            queue.put({"ok": False, "error": str(e)}) 
        except Exception: 
            pass 
 
 
def _extract_subject(claims: dict) -> str: 
    sub = claims.get("sub") 
    if not isinstance(sub, str) or not sub: 
        logger.warning("Missing or invalid subject in token claims") 
        raise HTTPException(status_code=401, detail="token_missing_subject") 
    logger.debug("Extracted subject from claims") 
    return sub 
 
 
def _timeout_multiplier(claims: dict) -> float: 
    roles = [str(r).strip() for r in claims.get("authorities", [])] 
    multipliers = [role_timeout_multiplier_map.get(r, unknown_timeout_multiplier) 
                   for r in roles] or [unknown_timeout_multiplier] 
    value = max(multipliers) 
118 
 
    logger.debug("Computed timeout multiplier", extra={"roles": roles, "multiplier": value}) 
    return value 
 
 
@app.get("/api/solve/optimization") 
async def get_all_optimization_methods(): 
    logger.debug("Loading optimization contract") 
    with open('optimization/contract.json', "r", encoding="utf-8") as f: 
        return json.loads(f.read()) 
 
 
@app.websocket("/ws/solve/optimization") 
async def ws_optimize(websocket: WebSocket): 
    send_lock = asyncio.Lock() 
 
    async def safe_send(payload: dict): 
        async with send_lock: 
            logger.debug("Sending websocket payload", extra={"type": payload.get("type")}) 
            await websocket.send_text(json.dumps(payload)) 
 
    async def safe_close(): 
        try: 
            logger.debug("Closing websocket connection") 
            await websocket.close() 
        except Exception: 
            logger.exception("Error while closing websocket") 
 
    async def send_and_close(reason: str): 
        logger.warning("Sending error and closing websocket", extra={"reason": reason}) 
        try: 
            await safe_send({"type": "error", "reason": reason}) 
        except Exception: 
            pass 
        finally: 
            await safe_close() 
 
    await websocket.accept() 
    token = websocket.query_params.get("token") 
    if not token: 
        await send_and_close("missing_token") 
        return 
119 
 
 
    try: 
        claims = decode_jwt_from_authorization(token) 
    except HTTPException as he: 
        await send_and_close(he.detail if isinstance(he.detail, str) else "invalid_token") 
        return 
    except Exception: 
        logger.exception("JWT decoding failed") 
        await send_and_close("invalid_token") 
        return 
 
    try: 
        user_uuid = _extract_subject(claims) 
    except HTTPException as he: 
        await send_and_close(he.detail) 
        return 
 
    await safe_send({"type": "authenticated"}) 
 
    task_created = False 
    graph_prepared = False 
 
    method = None 
    parameters = None 
 
    try: 
        try: 
            msg_text = await asyncio.wait_for(websocket.receive_text(), timeout=creation_timeout) 
        except asyncio.TimeoutError: 
            logger.warning("Task creation timed out", extra={"timeout": creation_timeout}) 
            await send_and_close("task_create_timeout") 
            return 
 
        try: 
            msg = json.loads(msg_text) 
        except Exception: 
            await send_and_close("invalid_json") 
            return 
 
        if msg.get("type") != "create": 
            await send_and_close("expected_create_first") 
120 
 
            return 
 
        method = msg.get("method") 
        parameters = msg.get("parameters") or {} 
        if not isinstance(method, str) or not isinstance(parameters, dict): 
            await send_and_close("invalid_create") 
            return 
 
        logger.debug("Created solve task", extra={"user_uuid": user_uuid, "method": method}) 
 
        async with active_tasks_lock: 
            existing = active_tasks.get(user_uuid) 
            if existing and not existing.get("done"): 
                await send_and_close("task_already_running") 
                return 
            active_tasks[user_uuid] = { 
                "done": False, 
                "method": method, 
                "parameters": parameters, 
                "best": None, 
                "cancel": asyncio.Event(), 
                "cancelled_notified": False, 
                "started": False, 
            } 
 
        task_created = True 
        await safe_send({"type": "task_created"}) 
 
        while True: 
            msg_text = await websocket.receive_text() 
            try: 
                msg = json.loads(msg_text) 
            except Exception: 
                await send_and_close("invalid_json") 
                return 
 
            mtype = msg.get("type") 
            base_timeout = int(solving_timeout * _timeout_multiplier(claims)) 
            base_timeout = min(max(base_timeout, solving_timeout_min), solving_timeout_max) 
 
            logger.debug( 
121 
 
                "Received WS message", 
                extra={"user_uuid": user_uuid, "type": mtype, "base_timeout": base_timeout}, 
            ) 
 
            if mtype == "prepare_graph": 
                if graph_prepared: 
                    await safe_send({"type": "error", "reason": "prepare_graph_already_called"}) 
                    continue 
 
                graph_prep_timeout = base_timeout // 2 
 
                async def prepare_function_graph(): 
                    def _work(): 
                        fig_n = msg.get("figure_n") 
                        try: 
                            fig_n = int(fig_n) 
                        except Exception: 
                            fig_n = 0 
                        if fig_n < 0: 
                            fig_n = 0 
                        logger.debug("Preparing graph in legacy main", extra={"method": method, "figure_n": fig_n}) 
                        return build_function_graph(parameters, math_functions, fig_n) 
                    return await asyncio.to_thread(_work) 
 
                try: 
                    validate_function_params(method, parameters) 
                    function_graph = await asyncio.wait_for(prepare_function_graph(), timeout=graph_prep_timeout) 
                except asyncio.TimeoutError: 
                    logger.warning("Graph preparation timed out (legacy main)", extra={"timeout": graph_prep_timeout}) 
                    await safe_send({"type": "graph_timeout", "seconds": graph_prep_timeout}) 
                    await safe_close() 
                    return 
                except Exception as e: 
                    logger.exception("Graph build failed in legacy main", extra={"error": str(e)}) 
                    await send_and_close("graph_build_failed") 
                    return 
 
                graph_prepared = True 
                await safe_send({"type": "graph_ready", "function_graph": function_graph}) 
 
            elif mtype == "start": 
122 
 
                try: 
                    validate_function_params(method, parameters) 
                except Exception: 
                    logger.warning("Invalid parameters for solve start (legacy main)", extra={"method": method}) 
                    await send_and_close("invalid_parameters") 
                    return 
 
                runs = msg.get("runs_number") 
                try: 
                    runs = int(runs) 
                except Exception: 
                    runs = 1 
                if runs < 1: 
                    runs = 1 
 
                async with active_tasks_lock: 
                    active_tasks[user_uuid]["started"] = True 
                    cancel_event = active_tasks[user_uuid]["cancel"] 
 
                logger.debug( 
                    "Starting solve session (legacy main)", 
                    extra={"user_uuid": user_uuid, "method": method, "runs": runs, "timeout": base_timeout}, 
                ) 
 
                async def do_solve(): 
                    nonlocal method, parameters 
                    best_val = None 
                    best_result = None 
                    try: 
                        for i in range(1, runs + 1): 
                            if cancel_event.is_set(): 
                                raise asyncio.CancelledError() 
                            logger.debug( 
                                "Solve iteration (legacy main)", 
                                extra={"user_uuid": user_uuid, "method": method, "iteration": i, "total": runs}, 
                            ) 
                            await safe_send({"type": "progress", "current": i, "total": runs}) 
                            # Run the solve in a separate process so we can kill it on demand 
                            ctx = multiprocessing.get_context("spawn") 
                            queue: multiprocessing.Queue = ctx.Queue() 
                            proc = ctx.Process(target=_solve_worker, args=(method, parameters, math_functions, queue)) 
123 
 
                            proc.start() 
 
                            # Per-run timeout: distribute overall time budget across runs, with a floor 
                            run_timeout = max(solving_timeout_min, min(base_timeout, solving_timeout_max)) 
 
                            raw_msg = None 
                            start = asyncio.get_running_loop().time() 
                            try: 
                                # Poll for cancel or result, without blocking the event loop 
                                while True: 
                                    if cancel_event.is_set(): 
                                        raise asyncio.CancelledError() 
                                    elapsed = asyncio.get_running_loop().time() - start 
                                    if elapsed >= run_timeout: 
                                        raise asyncio.TimeoutError() 
                                    try: 
                                        # Use a bounded wait in a thread to keep event loop responsive 
                                        raw_msg = await asyncio.to_thread(lambda: queue.get(timeout=0.25)) 
                                        break 
                                    except queue_mod.Empty: 
                                        # No message yet, continue polling 
                                        await asyncio.sleep(0.05) 
                            except asyncio.CancelledError: 
                                logger.info("Solve run cancelled (legacy main)", extra={"method": method}) 
                                try: 
                                    if proc.is_alive(): 
                                        proc.terminate() 
                                finally: 
                                    proc.join(timeout=1) 
                                # Propagate to outer handler in this coroutine 
                                raise 
                            except asyncio.TimeoutError: 
                                logger.warning( 
                                    "Solve run timed out (legacy main)", 
                                    extra={"method": method, "timeout": run_timeout}, 
                                ) 
                                try: 
                                    if proc.is_alive(): 
                                        proc.terminate() 
                                finally: 
                                    proc.join(timeout=1) 
124 
 
                                await safe_send({"type": "solve_timeout", "seconds": run_timeout}) 
                                await safe_close() 
                                return 
                            finally: 
                                # If process finished but hasn't been joined yet, join it 
                                if proc.is_alive() is False: 
                                    try: 
                                        proc.join(timeout=0.5) 
                                    except Exception: 
                                        pass 
 
                            if not raw_msg or not isinstance(raw_msg, dict) or not raw_msg.get("ok"): 
                                logger.error("Solve error returned from worker (legacy main)", extra={"method": method}) 
                                await send_and_close("solve_error") 
                                return 
                            raw = raw_msg.get("raw") 
 
                            try: 
                                result = build_result(parameters, method, raw) 
                            except Exception as e: 
                                logger.exception("Result build failed (legacy main)", extra={"error": str(e)}) 
                                await send_and_close("result_build_failed") 
                                return 
 
                            try: 
                                val = float(result.get("best_value")) 
                                mode = str(result.get("mode")) 
                            except Exception: 
                                val = None 
                                mode = "min" 
 
                            if mode not in ("min", "max"): 
                                mode = "min" 
 
                            improved = False 
                            if val is not None: 
                                better = False 
                                if best_val is not None: 
                                    if mode == "max": 
                                        better = val > best_val 
                                    else: 
125 
 
                                        better = val < best_val 
 
                                if best_val is None or better: 
                                    best_val = val 
                                    best_result = result 
                                    improved = True 
                            if i == 1 and best_result is None: 
                                best_result = result 
                                improved = True 
                            if improved: 
                                logger.debug( 
                                    "Best result updated (legacy main)", 
                                    extra={"user_uuid": user_uuid, "method": method, "value": best_val}, 
                                ) 
                                await safe_send({"type": "best_update", "best": best_result}) 
                        await safe_send({"type": "completed"}) 
                    except asyncio.CancelledError: 
                        # Notify cancellation immediately 
                        async with active_tasks_lock: 
                            if user_uuid in active_tasks: 
                                active_tasks[user_uuid]["done"] = True 
                                active_tasks[user_uuid]["cancelled_notified"] = True 
                        await safe_send({"type": "cancelled"}) 
                        await safe_close() 
                        return 
                    finally: 
                        async with active_tasks_lock: 
                            if user_uuid in active_tasks: 
                                active_tasks[user_uuid]["done"] = True 
 
                # Launch solve in background to keep accepting messages (e.g., cancel) 
                solve_task = asyncio.create_task(do_solve()) 
                async with active_tasks_lock: 
                    active_tasks[user_uuid]["task"] = solve_task 
                timeout_task = asyncio.create_task(asyncio.sleep(base_timeout)) 
 
                try: 
                    while True: 
                        # Prioritize task completion 
                        if solve_task.done(): 
                            # Propagate exceptions to trigger outer handlers in do_solve 
126 
 
                            try: 
                                await solve_task 
                            except asyncio.CancelledError: 
                                pass 
                            await safe_close() 
                            return 
 
                        # Race: wait for a message briefly 
                        got_msg = None 
                        try: 
                            got_msg = await asyncio.wait_for(websocket.receive_text(), timeout=0.2) 
                        except asyncio.TimeoutError: 
                            got_msg = None 
 
                        # Check overall timeout 
                        if timeout_task.done(): 
                            logger.warning( 
                                "Solve session timed out (legacy main)", 
                                extra={"user_uuid": user_uuid, "method": method, "timeout": base_timeout}, 
                            ) 
                            # Timeout: cancel running task and terminate its child process path inside 
                            solve_task.cancel() 
                            await safe_send({"type": "solve_timeout", "seconds": base_timeout}) 
                            await safe_close() 
                            return 
 
                        if got_msg is None: 
                            continue 
 
                        # Handle message while solving (support cancel) 
                        try: 
                            submsg = json.loads(got_msg) 
                        except Exception: 
                            await send_and_close("invalid_json") 
                            return 
 
                        if submsg.get("type") == "cancel": 
                            async with active_tasks_lock: 
                                task = active_tasks.get(user_uuid) 
                                if task and not task.get("done"): 
                                    task["cancel"].set() 
127 
 
                                    task["cancelled_notified"] = False 
                            # Best-effort: also cancel the background task 
                            solve_task.cancel() 
                            logger.info( 
                                "Solve session cancelled by client (legacy main)", 
                                extra={"user_uuid": user_uuid, "method": method}, 
                            ) 
                            # Do not close immediately; do_solve will send cancelled and we will close upon completion 
                            continue 
                        else: 
                            # Unexpected mid-solve message; ignore or error 
                            await safe_send({"type": "error", "reason": "unexpected_message_while_solving"}) 
                finally: 
                    timeout_task.cancel() 
 
            elif mtype == "cancel": 
                async with active_tasks_lock: 
                    task = active_tasks.get(user_uuid) 
                    if task and not task.get("done"): 
                        task["cancel"].set() 
                        if not task.get("started"): 
                            task["done"] = True 
                            task["cancelled_notified"] = True 
                            await safe_send({"type": "cancelled"}) 
                            await safe_close() 
                            return 
                        else: 
                            task["cancelled_notified"] = False 
                            continue 
                await safe_send({"type": "cancelled"}) 
                await safe_close() 
                return 
 
            else: 
                await send_and_close("unknown_message_type") 
                return 
 
    except WebSocketDisconnect: 
        if user_uuid and task_created: 
            async with active_tasks_lock: 
                task = active_tasks.get(user_uuid) 
128 
 
                if task and not task.get("done") and task.get("cancel"): 
                    task["cancel"].set() 
 
    except Exception: 
        if user_uuid and task_created: 
            async with active_tasks_lock: 
                task = active_tasks.get(user_uuid) 
                if task and not task.get("done") and task.get("cancel"): 
                    task["cancel"].set() 
        await send_and_close("internal_error") 
        return 
 
    finally: 
        if user_uuid and task_created: 
            async with active_tasks_lock: 
                active_tasks.pop(user_uuid, None)  
 
Б.5 solver-graphs-component.ts 
Текст програми побудови графіків за допомогою бібліотеки Plotly.js на основі 
даних, отриманих з сервісу обчислень: 
import { Component, Input, OnChanges, SimpleChanges, inject } from '@angular/core'; 
import { CommonModule } from '@angular/common'; 
import * as Plotly from 'plotly.js-dist-min'; 
import { SettingsService } from '../../../core/services/settings.service'; 
import { FunctionGraphData, SolverGraphsData, Graph2DConfig, Graph3DConfig } from 
'../../../core/models/solver/solver.models'; 
 
@Component({ 
  selector: 'app-solver-graphs', 
  standalone: true, 
  imports: [CommonModule], 
  templateUrl: 'solver-graphs-component.html', 
  styleUrls: ['./solver-graphs-component.css'] 
}) 
export class SolverGraphsComponent implements OnChanges { 
  @Input() data: SolverGraphsData | null | undefined = null; 
 
  @Input() preparedGraph: FunctionGraphData | null | undefined = null; 
 
  private settings = inject(SettingsService); 
129 
 
 
  private commonLayout = { 
    paper_bgcolor: 'rgba(0,0,0,0)', 
    plot_bgcolor: 'rgba(0,0,0,0)', 
    font: { color: '#6B7280' }, 
    margin: { t: 40, r: 20, b: 40, l: 40 }, 
    autosize: true 
  }; 
 
  ngOnChanges(changes: SimpleChanges): void { 
    if (changes['data'] || changes['preparedGraph']) { 
      setTimeout(() => this.renderAll(), 0); 
    } 
  } 
 
  private renderAll() { 
    const graphs2d = this.data?.['2d'] || []; 
    const graphs3d = this.data?.['3d'] || []; 
 
    if (graphs2d.length === 0 && graphs3d.length === 0 && this.preparedGraph) { 
      if (this.preparedGraph.type === '3d') { 
        this.draw3D( 
          { name: { en: 'Function', ua: 'Функція' }, mode: [], function_graph: true } as any, 
          'plot_3d_0' 
        ); 
      } else { 
        this.draw2D( 
          { name: { en: 'Function', ua: 'Функція' }, mode: [], function_graph: true } as any, 
          'plot_2d_0' 
        ); 
      } 
      return; 
    } 
 
    graphs3d.forEach((config, index) => { 
      this.draw3D(config, `plot_3d_${index}`); 
    }); 
 
    graphs2d.forEach((config, index) => { 
      this.draw2D(config, `plot_2d_${index}`); 
    }); 
130 
 
  } 
 
  private draw3D(config: Graph3DConfig, elementId: string) { 
    const traces: any[] = []; 
 
    if (config.function_graph && this.preparedGraph && this.preparedGraph.type === '3d') { 
      traces.push({ 
        type: 'surface', 
        x: this.preparedGraph.x_data || this.preparedGraph.x, 
        y: this.preparedGraph.y_data || this.preparedGraph.y, 
        z: this.preparedGraph.z_data || this.preparedGraph.z, 
        opacity: 0.4, 
        showscale: false, 
        colorscale: 'Greys', 
        contours: { 
          x: { show: true, color: '#444', width: 1 }, 
          y: { show: true, color: '#444', width: 1 }, 
          z: { show: false } 
        }, 
        hoverinfo: 'skip', 
        showlegend: false 
      }); 
    } 
 
    if (config.x_data && config.y_data && config.z_data) { 
      traces.push({ 
        type: 'scatter3d', 
        mode: 'markers', 
        x: config.x_data, 
        y: config.y_data, 
        z: config.z_data, 
        marker: { 
          size: 4, 
          color: config.color_data || config.line_color || 'blue', 
          colorscale: config.colorscale, 
          showscale: config.show_scale, 
        }, 
 
        name: this.getLocaleName(config.name), 
        showlegend: false 
      }); 
131 
 
    } 
 
    if (config.has_best && config.best_x !== undefined) { 
      traces.push({ 
        type: 'scatter3d', 
        mode: 'markers', 
        x: [config.best_x], 
        y: [config.best_y], 
        z: [config.best_z], 
        marker: { 
          symbol: 'diamond', 
          size: (config.best_size || 5) + 2, 
          color: config.best_color || 'red', 
        }, 
        name: 'Best', 
        showlegend: false 
      }); 
    } 
 
    const layout = { 
      ...this.commonLayout, 
      title: { text: this.getLocaleName(config.name) }, 
      scene: { 
        xaxis: { title: { text: this.getLocaleName(config.x_name) } }, 
        yaxis: { title: { text: this.getLocaleName(config.y_name) } }, 
        zaxis: { title: { text: this.getLocaleName(config.z_name) } } 
      } 
    }; 
 
    Plotly.newPlot(elementId, traces, layout as any); 
  } 
 
  private draw2D(config: Graph2DConfig, elementId: string) { 
    const traces: any[] = []; 
 
    if (config.function_graph && this.preparedGraph && this.preparedGraph.type !== '3d') { 
      const bgX = this.preparedGraph.x_data || this.preparedGraph.x; 
      const bgY = this.preparedGraph.y_data || this.preparedGraph.y; 
       
      if (bgX && bgY) { 
        traces.push({ 
132 
 
          type: 'scatter', 
          mode: 'lines', 
          x: bgX, 
          y: bgY, 
          line: { color: 'red', width: 2 }, 
          name: 'Function', 
          hoverinfo: 'skip' 
        }); 
      } 
    } 
 
    if (config.mode.includes('traces') && config.traces) { 
      config.traces.forEach(t => { 
        const optimized = this.optimizeData(config.x_data, t.y_data, t.mode); 
 
        traces.push({ 
          type: 'scatter', 
          mode: optimized.mode, 
          x: optimized.x, 
          y: optimized.y, 
          line: { color: t.line_color }, 
          name: this.getLocaleName(t.name) 
        }); 
      }); 
    } else if (config.x_data && config.y_data) { 
      const optimized = this.optimizeData(config.x_data, config.y_data, config.mode); 
 
      traces.push({ 
        type: 'scatter', 
        mode: optimized.mode, 
        x: optimized.x, 
        y: optimized.y, 
        marker: { 
          size: 8, 
          color: config.color_data || 'blue', 
          colorscale: config.colorscale, 
          showscale: config.show_scale 
        }, 
        line: { color: config.line_color }, 
        name: this.getLocaleName(config.name), 
        showlegend: false 
133 
 
      }); 
    } 
 
    if (config.has_best && config.best_x !== undefined) { 
      traces.push({ 
        type: 'scatter', 
        mode: 'markers', 
        x: [config.best_x], 
        y: [config.best_y], 
        marker: { 
          symbol: 'star', 
          size: 12, 
          color: config.best_color || 'red' 
        }, 
        name: 'Best', 
        showlegend: false 
      }); 
    } 
 
    const layout = { 
      ...this.commonLayout, 
      title: { text: this.getLocaleName(config.name) }, 
      xaxis: { title: { text: this.getLocaleName(config.x_name) }, showgrid: config.grid }, 
      yaxis: { title: { text: this.getLocaleName(config.y_name) }, showgrid: config.grid } 
    }; 
 
    Plotly.newPlot(elementId, traces, layout as any); 
  } 
 
  private getLocaleName(names: any): string { 
    const lang = this.settings.locale(); 
    return names ? (names[lang] || names.en || '') : ''; 
  } 
 
  private optimizeData(x: number[] | undefined, y: number[] | undefined, modeArr: string[]) { 
    if (!x || !y) return { x: [], y: [], mode: 'lines' }; 
 
    const limit = 250; 
    const total = x.length; 
 
    if (total <= limit) { 
134 
 
      return { x, y, mode: modeArr.join('+') }; 
    } 
 
    const newMode = 'lines'; 
    const step = Math.ceil(total / limit); 
    const newX = []; 
    const newY = []; 
 
    for (let i = 0; i < total; i += step) { 
      newX.push(x[i]); 
      newY.push(y[i]); 
    } 
 
    if (total > 0 && (total - 1) % step !== 0) { 
      newX.push(x[total - 1]); 
      newY.push(y[total - 1]); 
    } 
 
    return { x: newX, y: newY, mode: newMode }; 
  } 
} 
 
Б.6 JSON-контракт 
Текст програми модульного тестування міграції бази даних в сервісі безпеки, 
яке відбуваєтсья автоматично під час збірки сервісу та розгортанні через інструменти 
CI/CD: 
package com.optifind.db; 
 
import org.flywaydb.core.Flyway; 
import org.flywaydb.core.api.MigrationInfo; 
import org.junit.jupiter.api.AfterAll; 
import org.junit.jupiter.api.BeforeAll; 
import org.junit.jupiter.api.Test; 
import org.springframework.jdbc.core.JdbcTemplate; 
import org.springframework.jdbc.datasource.DriverManagerDataSource; 
import org.springframework.test.context.DynamicPropertyRegistry; 
import org.springframework.test.context.DynamicPropertySource; 
import org.testcontainers.containers.PostgreSQLContainer; 
import org.testcontainers.junit.jupiter.Container; 
135 
 
import org.testcontainers.junit.jupiter.Testcontainers; 
 
import javax.sql.DataSource; 
 
import java.util.ArrayList; 
import java.util.Comparator; 
import java.util.List; 
 
import static org.junit.jupiter.api.Assertions.assertEquals; 
import static org.junit.jupiter.api.Assertions.assertTrue; 
 
@Testcontainers 
public class DatabaseMigrationTest { 
    private static JdbcTemplate jdbcTemplate; 
 
    @Container 
    private static PostgreSQLContainer<?> postgreSQLContainer; 
 
    static { 
        try (PostgreSQLContainer<?> postgreSQLContainer = new PostgreSQLContainer<>("postgres:17.1")) { 
            postgreSQLContainer 
                    .withDatabaseName("test-db") 
                    .withUsername("postgres") 
                    .withPassword("postgres"); 
            DatabaseMigrationTest.postgreSQLContainer = postgreSQLContainer; 
        } 
    } 
 
    @DynamicPropertySource 
    static void postgreSQLProperties(DynamicPropertyRegistry registry) { 
        registry.add("spring.datasource.url", postgreSQLContainer::getJdbcUrl); 
        registry.add("spring.datasource.password", postgreSQLContainer::getPassword); 
        registry.add("spring.datasource.username", postgreSQLContainer::getUsername); 
        registry.add("spring.datasource.driver-class-name", postgreSQLContainer::getDriverClassName); 
    } 
 
    @BeforeAll 
    static void beforeAll() { 
        postgreSQLContainer.start(); 
 
        DataSource dataSource = new DriverManagerDataSource( 
136 
 
                postgreSQLContainer.getJdbcUrl(), 
                postgreSQLContainer.getUsername(), 
                postgreSQLContainer.getPassword() 
        ); 
 
        jdbcTemplate = new JdbcTemplate(dataSource); 
 
        Flyway flyway = Flyway.configure() 
                .dataSource(dataSource) 
                .locations("classpath:db/migration") 
                .load(); 
        flyway.migrate(); 
    } 
 
    @Test 
    void testThatContainerIsRunning() { 
        assertTrue(postgreSQLContainer.isRunning()); 
    } 
 
    @Test 
    void testRolesTable() { 
        Integer rolesRowCount = jdbcTemplate.queryForObject( 
                "SELECT COUNT(*) FROM roles", 
                Integer.class); 
        assertEquals(3, rolesRowCount); 
    } 
 
    @Test 
    void testAuthProvidersTable() { 
        Integer authProvidersRowCount = jdbcTemplate.queryForObject( 
                "SELECT COUNT(*) FROM auth_providers", 
                Integer.class); 
        assertEquals(2, authProvidersRowCount); 
    } 
 
    @Test 
    void testReapplyLastMigration() { 
        DataSource ds = new DriverManagerDataSource( 
                postgreSQLContainer.getJdbcUrl(), 
                postgreSQLContainer.getUsername(), 
                postgreSQLContainer.getPassword() 
137 
 
        ); 
        JdbcTemplate jt = new JdbcTemplate(ds); 
 
        Flyway inspector = Flyway.configure() 
                .dataSource(ds) 
                .locations("classpath:db/migration") 
                .load(); 
        var all = inspector.info().all(); 
        List<MigrationInfo> ordered = new ArrayList<>(); 
        for (var mi : all) { 
            if (mi.getVersion() != null) { 
                ordered.add(mi); 
            } 
        } 
        ordered.sort(Comparator.comparing(MigrationInfo::getVersion)); 
        String last = ordered.isEmpty() ? null : ordered.get(ordered.size() - 1).getVersion().toString(); 
        assertTrue(last != null && !last.isBlank(), "Expected at least one versioned migration"); 
 
        jt.update("DELETE FROM flyway_schema_history WHERE version = ?", last); 
 
        Flyway.configure() 
                .dataSource(ds) 
                .locations("classpath:db/migration") 
                .load() 
                .migrate(); 
 
        boolean lastApplied = false; 
        for (var mi : Flyway.configure().dataSource(ds).locations("classpath:db/migration").load().info().applied()) { 
            if (mi.getVersion() != null && mi.getVersion().toString().equals(last)) { 
                lastApplied = true; 
                break; 
            } 
        } 
        assertTrue(lastApplied); 
    } 
 
    @AfterAll 
    static void afterAll() { 
        postgreSQLContainer.stop(); 
    } 
}  
138 
 
ДОДАТОК В 
 
 
 
 
 
 
 
 
УПРАВЛІННЯ ПРОЄКТОМ СТВОРЕННЯ ВЕБ-ОРІЄНТОВАНОГО 
ЗАСТОСУНКУ ДЛЯ РОЗВ’ЯЗУВАННЯ ОПТИМІЗАЦІЙНИХ ЗАДАЧ 
ЧИСЕЛЬНИМИ МЕТОДАМИ 
 
Інструкція користувача 
482.ЧДТУ.52406-01 34 01 
 
Листів 6 
 
 
 
 
Розробник ____________________ Заєць В.М. 
Керівник ____________________  Триус Ю.В. 
 
 
 
 
 
 
Черкаси – 2025  
139 
 
ВСТУП 
Предметом дослідження кваліфікаційної роботи магістра є проєкт створення 
веб-орієнтованого застосунку для розв’язування оптимізаційних задач чисельними 
методами. 
Для реалізації веб-орієнтованого застосунку для розв’язування оптимізаційних 
задач чисельними методами застосовувалися такі засоби:  
 мови програмування Java, Python та TypeScript; 
 мова розмітки веб-сторінок HTML; 
 мова стилю сторінок CSS; 
 фреймворки Spring, FastApi та Angular;  
 СКБД PostgreSQL; 
 система контейнеризації Docker. 
Даний документ складається з 5 сторінок та призначений для опису роботи 
користувача з веб-орієнтованим сервісом. 
 
Робота з сервісом 
Для початку роботи з веб-орієнтованим застосунком необхідно відкрити 
браузер та ввести в адресному рядку доменну адресу сервера. У залежності від 
способу розгортання це може бути: 
– доменне ім’я (наприклад, optifind.knsa.chdtu.edu.ua); 
– локальна адреса сервера (http://localhost:4200) (Рис. В.1); 
– IP-адреса хмарного сервера. 
 
Рисунок В.1 – Приклад доступу до застосунку з локального сервера 
140 
 
Після завантаження головної сторінки та натискання кнопки «Почати» 
(Рис. В.2), користувачу буде запропоновано виконати авторизацію, для отримання 
доступу до повного функціоналу (Рис. В.3). 
 
Рисунок В.2 – Кнопка «Почати» на головній сторінці
 
Рисунок В.3 – Сторінка авторизації 
Сервіс підтримує два способи авторизації: 
1. Реєстрація локального облікового запису. На сторінці реєстрації (Рис. В.4) 
користувач вводить ім’я, email та пароль. На основі цих даних створюється 
обліковий запис. На вказану пошту надійде лист з посиланням, за яким 
користувач має перейти, для активації можливості авторизуватися в 
обліковий запис (Рис. В.5). 
141 
 
 
 
Рисунок В.4 – Сторінка реєстрації 
 
Рисунок В.5 – Лист з посиланням для активації облікового запису  
2. Вхід через Google (Рис В.6). Вхід через Google не вимагає створення 
локального облікового запису, проте у випадку існування такого запису для 
пошти, через яку користувач авторизується в Google, вхід буде виконано в 
локальний обліковий запис без запиту даних для авторизації. 
142 
 
 
Рисунок В.6 – Авторизація через Google 
Після авторизації користувач отримає доступ до сторінок налаштувань 
(Рис. В.7) та обрахунків. 
 
Рисунок В.7 – Сторінка налаштувань 
Якщо користувач авторизувався тільки через Google, то для отримання доступу 
через локальний обліковий запис, потрібно задати пароль за допомогою «Змінити 
пароль» на сторінці налаштувань (Рис. В.8). Поле «Старий пароль» в такому випадку 
143 
 
не впливає на процес задання пароля, але має обов’язково бути введеним. 
Рекомендовано використати пароль, що задається, в обох полях введення для 
уникнення плутанини. 
 
Рисунок В.8 – Зміна пароля користувача 
Зміна пошти, в свою чергу, вимагає введення нової пошти в формі «Змінити 
пошту» (Рис. В.9), натискання кнопки «Зберегти» та підтвердження вказаної пошти, 
переходом за посиланням в листі, який надійде на неї. 
 
Рисунок В.9 – Зміна електронної пошти користувача 
Для зручності користування застосунком, в головному меню сайту та на 
сторінці налаштувань є кнопки для зміни мови та теми сайту (Рис. В.10). 
144 
 
 
Рисунок В.10 – Кнопки для зміни мови та теми сайту 
На сторінці обрахунків, на яку авторизований користувач може потрапити 
натисканням кнопки «Почати» на головній сторінці, користувач має спочатку обрати 
зі списку метод оптимізації (Рис. В.11). 
 
Рисунок В.11 – Сторінка обчислень на етапі вибору методу оптимізації 
Після вибору методу оптимізації, з’явиться форма введення параметрів задачі, 
вибору тестової функції та кнопка «Обчислити» (Рис. В.12). Форма автоматично 
підставляє рекомендовані параметри задачі та перевіряє введені користувачем дані. 
Після введення всіх параметрів та натискання кнопки «Обчислити», з’явиться 
шкала прогресу та повідомлення про поточний стан виконання обчислень (Рис. В.13). 
145 
 
 
Рисунок В.12 – Сторінка обчислень на етапі введення параметрів задачі на прикладі 
методу APSO (Варіант 1) 
 
Рисунок В.13 – Відображення прогресу виконання 
Результати обчислень та графіки будуть відображатись відразу після виконання 
першого повторення, але у випадку знаходження кращого повторення, всі дані та 
графіки будуть замінені на актуальні (Рис. В.14-В.16). 
Після виконання обчислень, користувач може зберегти дані про виконання 
локально на своєму комп’ютері у вигляді JSON-файлу (Рис. В.17). До цих даних 
146 
 
входять обраний метод, задані параметри задачі, результати обчислень та дані для 
побудови графіків. 
 
Рисунок В.14 – Виведення результатів обчислень та графіку функції для методу 
APSO (Варіант 1) для тестової функції Растригіна 
147 
 
 
Рисунок В.15 – Графіки фінальних положень частинок та збіжності значення 
функції для методу APSO (Варіант 1) для тестової функції Растригіна 
148 
 
 
Рисунок В.16 – Графіки точності обрахунків та керуючих коефіцієнтів для методу 
APSO (Варіант 1) для тестової функції Растригіна 
149 
 
 
Рисунок В.17 – Локальне збереження результатів обчислень 
У будь-який момент користувач може імпортувати цей файл, натиснувши 
кнопку «JSON Import» на сторінці обчислень. Це автоматично обере метод 
оптимізації, введе параметри задачі, а також виведе результати обчислень та графіки, 
без виконання обрахунків на стороні серверу. 
Окремо, користувач може зберегти графіки, натисканням кнопки «Download 
plot as a PNG» (Рис. В.18), що завантажить графік у вигляді PNG-файлу на комп’ютер 
користувача. 
 
Рисунок В.18 – Кнопка збереження графіка у вигляді PNG-файлу  
150 
 
ДОДАТОК Г 
 
 
 
 
 
 
 
 
УПРАВЛІННЯ ПРОЄКТОМ СТВОРЕННЯ ВЕБ-ОРІЄНТОВАНОГО 
ЗАСТОСУНКУ ДЛЯ РОЗВ’ЯЗУВАННЯ ОПТИМІЗАЦІЙНИХ ЗАДАЧ 
ЧИСЕЛЬНИМИ МЕТОДАМИ 
 
Публікації з теми кваліфікаційної роботи магістра 
482.ЧДТУ.52406-01 91 01 
 
Листів 2 
 
 
 
 
Розробник ____________________ Заєць В.М. 
Керівник ____________________  Триус Ю.В. 
 
 
 
 
 
 
Черкаси – 2025  
151 
 
1. Результати кваліфікаційної роботи магістра опубліковані у збірнику тез доповідей ІV 
міжнародній науково-практичній Інтернет-конференції «ІПШРІТ-2025»: Заєць В.М., Триус Ю.В. 
Управління проєктом створення веб-орієнтованого застосунку для розв’язання оптимізаційних 
задач: Збірник тез доповідей ІV Міжнар. наук.-практич. конфер. «Інновації та перспективні шляхи 
розвитку інформаційних технологій» (25 лист. 2025 р., м. Черкаси) [Електронний ресурс] / упоряд. 
: Т. О. Прокопенко, О. І. Підкуйко. М-во освіти і науки України, Черкас. держ. технол. ун-т. Черкаси 
: ЧДТУ, 2025. С. 139-140. 
 
152 
 
 
 
 
 
 
153 
 
 
154