Ela.kpi.ua



НАЦ?ОНАЛЬНИЙ ТЕХН?ЧНИЙ УН?ВЕРСИТЕТ УКРА?НИ?КИ?ВСЬКИЙ ПОЛ?ТЕХН?ЧНИЙ ?НСТИТУТ ?МЕН? ?ГОРЯ С?КОРСЬКОГО??НСТИТУТ ПРИКЛАДНОГО СИСТЕМНОГО АНАЛ?ЗУКАФЕДРА МАТЕМАТИЧНИХ МЕТОД?В СИСТЕМНОГО АНАЛ?ЗУНа правах рукописуДо захисту допущеноУДК 004.457В. о. зав?дувача кафедри ММСАО.Л.Тимощук?___? ____________ 2019 р.Маг?стерська дисертац?яна здобуття ступеня маг?стра за спец?альн?стю 122 Комп’ютерн? наукина тему: ??нформац?йна технолог?я ?нтелектуального анал?зу даних для автоматизац?? тестування?Виконала: студентка ?? курсу, групи КА-83 мпБлощаневич Катерина Олександр?вна____________Кер?вник: старш. викл. ММСАк.т.н, Коновалюк М. М. ____________Рецензент: декан Ф?ОТКП? ?м. ?горя С?корського,професор, д. ф.-м. н. Теленик С. Ф. ____________Засв?дчую, що у ц?й маг?стерськ?й дисертац??нема? запозичень з праць ?нших автор?вбез в?дпов?дних посиланьСтудент ____________Ки?в2019НАЦ?ОНАЛЬНИЙ ТЕХН?ЧНИЙ УН?ВЕРСИТЕТ УКРА?НИ?КИ?ВСЬКИЙ ПОЛ?ТЕХН?ЧНИЙ ?НСТИТУТ ?МЕН? ?ГОРЯ С?КОРСЬКОГО??НСТИТУТ ПРИКЛАДНОГО СИСТЕМНОГО АНАЛ?ЗУКАФЕДРА МАТЕМАТИЧНИХ МЕТОД?В СИСТЕМНОГО АНАЛ?ЗУР?вень вищо? осв?ти— другий (маг?стерський)Спец?альн?сть— 122?Комп’ютерн? науки?ЗАТВЕРДЖУЮ В. о. зав?дувача кафедри ММСА О. Л. Тимощук?___? ____________ 2019 р.ЗАВДАННЯна маг?стерську дисертац?ю студентц? Блощаневич Катерин? Олександр?вн?1. Тема дисертац??: ??нформац?йна технолог?я ?нтелектуального анал?зу даних для автоматизац?? тестування?, науковий кер?вник дисертац?? Коновалюк Максим Михайлович, к.т.н., старший викладач, затверджен? наказом по ун?верситету в?д ?08? листопада 2019р. № 3862-с.2. Терм?н подання студентом дисертац??: 13 грудня 2019 р.3. Об’?кт досл?дження: алгоритми та методи створення ?ндив?дуальних вар?ант?в тесту в автоматизованих системах тестування знань4. Предмет досл?дження: алгоритми ?ндив?дуального вибору запитань в тестов? завдання5. Перел?к завдань, як? потр?бно розробити:1) досл?дити сучасний стан та особливост? застосування алгоритм?в розпод?лення запитань в тестових завданнях;2) сформулювати задачу проходження деревом запитань та переоц?нки ?х р?вн?в складност? за допомогою метода Монте Карло, ?снуючих алгоритм?в та алгоритму кластеризац??;3) розв’язати сформульовану задачу та на ?? основ? створити програмний продукт;4) пошук даних для застосування в програм?;5) реал?зувати метод проходження по дереву обраним алгоритмом в?дпов?дно до обраних метод?в та обраного типу збереження даних;6) розробити стартап-проект виведення на ринок результат?в досл?дження;7) розробити концептуальн? висновки за результатами наукового досл?дження6. Ор??нтовний перел?к граф?чного (?люстративного) матер?алу:1). Блок-схема алгоритму (рис.);2). Схеми графово? бази даних (рис.);3). Приклади результат?в функц?онування створеного програмного продукту (рис.);4). Таблиц? у розд?л? стартап-проекту7. Дата видач? завдання: 02 вересня 2019 р.Календарний план№ з/пНазва етап?в виконання маг?стерсько? дисертац??Терм?н виконання етап?в маг?стерсько? дисертац??1.Концептуальний вступ дисертац??. Формулювання об’?кта, предмета, ц?л?, завдань, новизни, практично? значущост? результат?в06.09.2019—13.09.20192.Перший розд?л. Огляд л?тературно-?нформац?йних джерел. Характеристика об’?кта14.09.2019—27.09.20193.Другий розд?л. Формулювання задач? проходження деревом за допомогою метода Монте Карло, ?снуючих алгоритм?в, алгоритм?в кластеризац??, ?? розв’язок28.09.2019—11.10.20195.Трет?й розд?л. ?мплементац?я отриманих результат?в у програмний продукт. Тестування програми12.10.2019—29.10.20196.Четвертий розд?л. Стартап-проект30.10.2019—14.11.20197.Концептуальн? висновки. Перспективи розвитку отриманих р?шень15.11.2019—22.11.2019Студент К. О. БлощаневичНауковий кер?вник дисертац??М. М. КоновалюкРЕФЕРАТМаг?стерська дисертац?я: 70 с., 23 табл., 15 рис., 1 дод., 43 джерел.?НФОРМАЦ?ЙНА СИСТЕМА, СИСТЕМА ТЕСТУВАННЯ, АЛГОРИТМИ ПОБУДОВИ ВАР?АНТ?В ТЕСТУ, АЛГОРИТМИ ЕФЕКТИВНОГО ПРОХОДУ ГРАФОМ, МЕТОД МОНТЕ КАРЛО, ТЕСТУВАННЯ СТУДЕНТ?В, АЛГОРИТМИ ТЕСТУВАННЯ.В дан?й робот? проведено розробку алгоритму ?ндив?дуального вибору запитань до тесту для використання в системах автоматизац?? тестування в навчальних закладах.Метою дано? роботи був синтез ефективного способу вибору тестових запитань до вар?анту тесту з використанням ?снуючих алгоритм?в, методу Монте Карло та алгоритм?в машинного навчання. Для досягнення дано? мети було поставлено та вир?шено наступн? завдання: досл?джено сучасний стан та особливост? застосування способ?в створення ?ндив?дуальних тестових вар?ант?в; змодельовано структуру даних та спос?б проходження нею за допомогою метода Монте Карло; сформульовано та розв’язано задачу переоц?нки р?вн?в складност? запитань в процес? проведення тестування; створено програму для реал?зац?? розв’язку поставлено? задач?; зроблен? концептуальн? висновки за результатами проведено? роботи. Об’?ктом досл?дження ? алгоритми та методи вибору запитань в автоматизованих системах тестування знань. Предметом досл?дження ? алгоритми ?ндив?дуального вибору запитань в тестов? завдання.ABSTRACTThe masters thesis: 70 p., 23 tab., 15 fig., 1 appendix, 43 RMATION SYSTEM, TESTING SYSTEM, ALGORITHM FOR CONSTRUCTING VARIANTS OF THE TEST, ALGORITHM FOR EFFECTIVE PASSING THROUGH THE GRAPH, MONTE CARLO METHOD, TESTING STUDENTS, TESTING rmation technology for intellectual analysis of data for testing automation.The work carried out to develop an algorithm for individual choice of test questions for testing automation systems in educational institutions.The purpose of this work was to synthesize an effective way for selecting test questions to a test variant using existing algorithms, the Monte Carlo method, and machine learning methods. To achieve this goal, the following tasks were set and solved: the current state and peculiarities of application of ways of creating individual test variants were investigated; modeled the data structure and the way it is transmitted using the Monte Carlo method; formulated and solved the task of re-evaluating the difficulty levels of the testing process; created a program to implement the solution to the task; conceptual conclusions were drawn from the results of the work.The object of research is algorithms and methods for selecting questions in automated knowledge testing systems.The subject of research is the algorithms of individual choice of questions in the test task.ЗМ?СТ TOC \o "1-3" \h \z \u ВСТУП PAGEREF _Toc26871491 \h 9РОЗД?Л 1 СИСТЕМИ АВТОМАТИЗОВАНОГО ТЕСТУВАННЯ ТА ТЕХНОЛОГ?? ?НТЕЛЕКТУАЛЬНОГО АНАЛ?ЗУ ДАНИХ PAGEREF _Toc26871492 \h 131.1?нструменти ?нтелектуального анал?зу даних в ?снуючих системах тестування. Способи орган?зац?? збереження даних PAGEREF _Toc26871493 \h 131.2Постановка задач? PAGEREF _Toc26871494 \h 181.3Алгоритми та методи створення вар?ант?в тесту в сучасних автоматизованих системах тестування PAGEREF _Toc26871495 \h 191.4Методи оц?нки р?вн?в складност? запитань в сучасних системах тестування знань PAGEREF _Toc26871496 \h 241.5 Висновок до розд?лу PAGEREF _Toc26871497 \h 27РОЗД?Л 2 АЛГОРИТМ ?НДИВ?ДУАЛЬНОГО ВИБОРУ ЗАПИТАНЬ ДО ВАР?АНТ?В ТЕСТУ З УРАХУВАННЯМ ??РАРХ?ЧНОСТ? СТРУКТУРИ ДАНИХ PAGEREF _Toc26871498 \h 302.1 Структура збереження даних в систем? тестування PAGEREF _Toc26871499 \h 302.2 Алгоритм вибору запитань до ?ндив?дуального вар?анту тесту PAGEREF _Toc26871500 \h 312.3 Застосування модиф?кованого алгоритму k-means++ для переоц?нки р?вн?в складност? запитань PAGEREF _Toc26871501 \h 342.4 Висновок до розд?лу PAGEREF _Toc26871503 \h 36РОЗД?Л 3 ТЕХНОЛОГ?? РЕАЛ?ЗАЦ?? ПРОГРАМНОГО ПРОДУКТУ PAGEREF _Toc26871504 \h 373.1 Виб?р бази даних для ??рарх?чно? модел? даних. Схема бази даних PAGEREF _Toc26871505 \h 373.2 Виб?р мови програмування та необх?дних б?бл?отек PAGEREF _Toc26871506 \h 413.3 Анал?з результат?в роботи ПП PAGEREF _Toc26871507 \h 423.4 Висновок до розд?лу PAGEREF _Toc26871508 \h 45РОЗД?Л 4 РОЗРОБЛЕННЯ СТАРТАП-ПРОЕКТУ PAGEREF _Toc26871509 \h 464.1Опис ?де? проекту PAGEREF _Toc26871512 \h 464.2Технолог?чний аудит ?де? проекту PAGEREF _Toc26871513 \h 484.3Анал?з ринкових можливостей запуску стартап-проекту PAGEREF _Toc26871514 \h 494.4Розроблення ринково? стратег?? проекту PAGEREF _Toc26871515 \h 564.5Розроблення маркетингово? програми стартап-проекту PAGEREF _Toc26871516 \h 584.6Висновки до розд?лу PAGEREF _Toc26871517 \h 61ВИСНОВКИ PAGEREF _Toc26871518 \h 63ПЕРЕЛ?К ПОСИЛАНЬ PAGEREF _Toc26871519 \h 65ДОДАТОК А PAGEREF _Toc26871520 \h 70ПЕРЕЛ?К СКОРОЧЕНЬБД – база даних;ОСТ – оптимальна структура тесту;ПП – програмний продукт;СКБД – система керування базою даних;ЦЛП – ц?лочисельне л?н?йне програмування;UCB – Upper-Confidence-Bound;UCT – Confidence bound applied to Trees. ВСТУПОдним з головних завдань для Укра?ни в рамках побудови сильно? та сучасно? ?вропейсько? демократично? держави ? проведення ефективно? осв?тньо? реформи. Прийнят? Верховною Радою осв?тн? закони забезпечують вир?шення ключово? проблеми системи осв?ти Укра?ни – зростання ступеня нев?дпов?дност? зм?сту ? форм осв?ти вимогам ХХ? ст. При застосуванн? цих реформ виника? необх?дн?сть впровадження нов?тн?х ?нформац?йних технолог?й, ор??нтованих на всеб?чне розкриття знань отриманих в процес? навчання та збереження неупередженост? оц?нювання. Комп'ютерне тестування як один ?з сучасних метод?в контролю знань в?д?гра? важливу роль при реал?зац?? компетентного п?дходу в сфер? осв?ти. Його використання в умовах обмеження часу тестування дозволя? зб?льшити обсяг знань, що перев?ряються ? значно п?двищити об'?ктивн?сть оц?нки завдяки стандартизац?? тест?в ? само? процедури тестування.П?д впливом сучасного швидкого темпу зростання ?нтеграц?? ?нформац?йних технолог?й в ус? сфери життя людини з’явилися та стали доступними десятки систем комп’ютерного тестування р?зних тип?в, як автономн?, так ? системи тестування в склад? комплексних навчальних систем. За способом вза?мод?? з користувачем системи комп’ютерного тестування под?ляються на локальн? (потребують встановлення та налаштування додаткового програмного забезпечення) та ?нтерактивн?, використання яких ? б?льш поширеним, оск?льки вони не потребують жодних налаштувань та ?сну? багато серв?с?в, що дозволяють в?льно користуватися даними системами. В б?льшост? таких систем зм?ст запитань, тесту, а також окремих вар?ант?в тесту визнача?ться викладачем зг?дно його досв?ду та суб’?ктивного розум?ння структури та мети окремого тесту. Прагнення максимально розширити обсяг навчального матер?алу, що перев?ря?ться та заглибитись до специф?чних особливостей тематики матер?алу призводить до перевантаженост? тесту за зм?стом ? зб?льшення часу тестування. Це вплива? на результат тестування, неяк?сно складений тест не може забезпечити об’?ктивно? оц?нити знань, що негативно вплива? на процес тестування та на процес навчання в ц?лому. Процес створення та проведення тест?в в навчальних закладах складний ? потребу? в?д викладача не лише в?льного волод?ння матер?алом, але й навичок створювати тести, що в?дпов?дають вимогам щодо формулювання тестових завдань, а також розпод?лення тестових завдань в рамках вар?анту [1, 2].При створенн? комп'ютерних систем контролю знань важливими ? розробка тестових завдань, визначення зм?сту тесту та автоматична генерац?я вар?ант?в тест?в безпосередньо п?д час сеансу тестування. Поряд з? створенням ун?версальних систем, актуальною ? розробка технолог?? автоматично? генерац?? вар?ант?в тестових завдань в on-line режим?, яка забезпечу? ?ндив?дуальн?сть сформованих вар?ант?в в?дпов?дно до ?х р?вня складност? та розпод?лу за темами.Результат тестування повинен давати можлив?сть оц?нити не лише р?вень знань тестованого, а й, за наявност?, завдання з якими в основно? маси тестованих виникли складност? (можливо некоректн? або нев?рно сформульован?), що допоможе у вдосконаленн? тесту та покращенн? контролю знань. Тому важливо правильно обрати критер??, за якими буде проводитися генерац?я ?ндив?дуальних вар?ант?в.Б?льш?сть ?снуючих систем тестування, що знаходяться у в?льному доступ? не дозволяють виконувати генерац?ю ?ндив?дуальних вар?ант?в, запитання в таких системах розпод?ляються по вар?антах тесту автоматично випадковим чином, або вручну користувачем. В решт? систем використовуються л?н?йн? алгоритми, що дозволяють обирати наступне запитання для студента враховуючи його в?дпов?дь на попередн? запитання, тобто алгоритм врахову? р?вн? складност? запитань. ?снують також алгоритми, що дозволяють враховувати не лише останню в?дпов?дь тестованого та неф?ксовану к?льк?сть запитань у вар?антах тестових завдань. Кожна з ?снуючих на даний момент систем автоматизац?? тестування ма? власний алгоритм, що м?стить сво? переваги та недол?ки. Використання в тестових системах технолог?й ?нтелектуального анал?зу даних дозволя? вир?шити частину зазначених завдань, однак пов’язано з певними складностями. До переваг таких технолог?й можна в?днести:можлив?сть врахування при створенн? тестових завдань ??рарх?чност? структури тестових запитань;можлив?сть використання зм?нно? к?лькост? запитань в вар?ант? тесту;динам?чна зм?на р?вня складност? запитань в кожному ?ндив?дуальному вар?ант?;можлив?сть швидко? масово? оц?нки знань;можлив?сть динам?чно? зм?ни р?вня складност? запитань в процес? проведення тесту з? збереженням незм?нност? структури даних в баз? даних (БД);можлив?сть оц?нки знань з певного предмету або окремо? його теми.Недол?ки:?сну? можлив?сть обрання правильних в?дпов?дей навмання, що призводить до помилок п?д час переоц?нки р?вн?в складност? запитань, а отже ? подальшо? роботи алгоритму;складн?сть п?дбору технолог?? за якою в?дбува?ться переоц?нка запитань, технолог?? ефективного проходження по запитанням та алгоритму на якому базу?ться основний принцип вибору запитань;складн?сть реал?зац?? та використання;необх?дн?сть задання ч?тко? ??рарх?чно? структури запитань в рамках теми;необх?дн?сть проведення налаштувань та встановлення додаткового ПЗ.Створення та застосування алгоритму, що дозволить враховувати так? фактори як р?вень складност? запитання, а також тему або тематику до яко? воно належить при вибор? запитань для створення ?ндив?дуального вар?анту тесту, дозволя? надати систем? необх?дних для створення та проведення як?сного тесту можливостей, забезпечити розширювану та обновлювану базу тест?в з р?зних предмет?в. Це дозволить не зациклюватися на повторному створенн? вже ?снуючого тесту, а вдосконалювати завдання, охоплювати нов? теми, уникати концентрац?? основно? к?лькост? запитань в рамках лише одн??? тематики, а також враховувати тенденц?? певних запитань до зм?ни свого р?вня складност?. Це допоможе виявити надто прост? запитання та виключити ?х з тестових завдань, а також виявити запитання, що набули високого р?вня складност?, на основ? чого можливо буде з’ясувати тему, як?й сл?д прид?ляти б?льше уваги в процес? навчання, виправити помилки та неточност? в запитаннях або видалити нев?дпов?дн? запитання з бази.Це дозволить з часом повн?стю автоматизувати процес проведення тестування, що полегшить процес оц?нювання знань та дозволить економити час на проведенн? та перев?рц? тесту, а також забезпечить об’?ктивн?сть оц?нки [3-5].РОЗД?Л 1 СИСТЕМИ АВТОМАТИЗОВАНОГО ТЕСТУВАННЯ ТА ТЕХНОЛОГ?? ?НТЕЛЕКТУАЛЬНОГО АНАЛ?ЗУ ДАНИХ?нструменти ?нтелектуального анал?зу даних в ?снуючих системах тестування. Способи орган?зац?? збереження даних На даний час ?сну? безл?ч локальних та ?нтерактивних комп'ютерних систем тестування знань. Вс? вони мають певн? в?дм?нност? в способ? збереження даних, а саме тестових запитань, вар?ант?в тестових завдань, набор?в запитань, що можуть бути використан? в певному тест? для створення вар?ант?в. Також ?сну? дек?лька основних груп метод?в створення вар?ант?в тесту. Одним з найважлив?ших момент?в розробки комп’ютерних систем тестування знань студент?в ? розробка алгоритму для вибору запитань ?з бази. М?н?мальн? вимоги до алгоритму вибору запитань до тестового вар?анту можна сформулювати наступним чином:врахування р?вня складност? запитань;уникнення повтор?в запитань в межах одного вар?анту; уникнення повтор?в запитань в к?лькох вар?антах. На даний момент ?снують готов? ефективн? алгоритми, як? можна використати в розроблюван?й систем? тестування знань. В б?льшост? систем запитання в б?лет додаються або вручну, або випадковим чином.Найпоширен?шими способами збереження даних в автоматизованих системах тестування ? реляц?йн? системи керування базами даних (СКБД) та файлов? сховища.Одн??ю з систем, що мають найпрост?ший спос?б розпод?лення запитань по вар?антах тесту ? система Education Monitor. Даний програмний продукт (ПП) дозволя? збер?гати ?нформац?ю про тему та р?вн? складност? запитань, однак дан? вносяться вручну користувачем ? не враховуються автоматично при генерац?? вар?анту (рис. 1.1). Додавання запитань до тесту викону?ться користувачем, тому можливе виникнення наступних проблем:запитання повторюються в рамках одного тесту;вар?анти можуть бути нер?внозначн? за складн?стю;вар?анти можуть не включати в себе одн??? або к?лькох необх?дних тем;генерац?я вар?ант?в в?дбува?ться за участ? користувача, що може бути тривалим процесом.Дан? збер?гаються в реляц?йн?й СКБД MySQL, що ускладню? процес збереження ??рарх?? запитань в?дпов?дно до тем та п?дтем [6-7].Рисунок 1.1 – Модуль створення тесту системи Education MonitorПрограма ?Айрен? не дозволя? розпод?ляти запитання за р?внями складност? та темами, запитання можуть лише в?дноситись до певного тесту, тобто, якщо тест охоплю? к?лька тем, ПП не нада? користувачу можливост? зазначити та використовувати це. Також програма збер?га? результати тестування у вигляд? окремих файл?в, що не да? змоги впровадження автоматизовано? оц?нки складност? запитань п?сля проходження певною к?льк?стю тестованих заданого тесту.Запитання до вар?анта тесту можуть додаватися в тому порядку, в якому вони були створен? або перем?шуватись випадковим чином всередин? вар?анту при вибор? прапорця ?Перем?шувати запитання? (рис. 1.2). Рисунок 1.2 – В?кно редактора проф?лю тестування в систем? тестування ?Айрен?Також система тестування ?Айрен? дозволя? створювати запитання з? сценар??м, тобто запитання з? зм?нними параметрами, що також дозволя? забезпечити вар?ативн?сть тесту (рис. 1.3). Проте для застосування ц??? функц?? ПП користувачу необх?дно мати навички програмування на Pascal для написання простих сценар??в [8-9].Рисунок 1.3 – В?кно редактора сценар??в та приклад сценар?ю в систем? тестування ?Айрен?Система VeralTest дозволя? збер?гати результати тестування лише у вигляд? окремих файл?в або арх?ву файл?в. Також даний ПП да? користувачу змогу групувати запитання за складн?стю та за темою. Редактор створення запитань ц??? системи м?стить вкладку ?Секц??? (рис. 1.4), яка дозволя? користувачу об’?днувати запитання за р?внями складност? або за темою, притому програма пов?домить, якщо таке запитання вже було використано в блоц? ?ншого р?вня складност?, або ?ншо? теми. Рисунок 1.4 – В?кно редактора тест?в в систем? тестування VeralTestТаке структурування запитань дозволя? накладати обмеження на к?льк?сть запитань з кожно? теми при створенн? вар?ант?в тесту, а також встановлювати р?вень складност? (запитання будуть обиратися лише з в?дпов?дно? секц??), або встановити адаптивне проходження тесту – р?вень складност? запитань буде зм?нюватися залежно в?д в?дпов?дей тестованого, що не було можливим в жодн?й з попередн?х розглянутих систем. Проте VeralTest також не дозволя? адаптивно зм?нювати р?вн? складност? запитань зг?дно з результатами в?дпов?дей на них, та не дозволя? збер?гати ??рарх?? запитань в рамках теми [10]. Система тестування INDIGO забезпечу? збереження даних в сховищ? файлового типу на окремому сервер?. Система п?дтриму? багатор?вневе ??рарх?чне групування тест?в за темами та р?внями складност?.У програм? тестування INDIGO можливост? генерац?? випадкових вар?ант?в тест?в не обмежуються можлив?стю перем?шування питань тесту ? ?х вар?ант?в в?дпов?дей. Оск?льки в даному ПП реал?зована функц?я багатор?вневого ??рарх?чного групування питань з можлив?стю задання порядку видач? вкладених елемент?в ? ?х випадково? виб?рки для кожно? групи, то можна гнучко задавати автоматичну генерац?ю вар?ант?в тест?в. Наприклад, ? екзаменац?йний тест з ?ноземно? мови, який м?стить розд?ли ?Лексика?, ?Граматика? ? ?Робота з текстом?, як? повинн? сл?дувати посл?довно, при цьому всередин? кожного розд?лу ? завдання (групи питань), як? повинн? видаватися у випадковому порядку в межах свого розд?лу, а кожне з таких завдань м?стить банк питань, з якого ма? випадковим чином вибиратися певна к?льк?сть питань, ?ндив?дуальна для кожного завдання. Так? та ?нш? складн? правила генерац?? тест?в досить легко ? ?нту?тивно зрозум?ло реал?зуються в редактор? тест?в INDIGO [11-12].MyTestXPro збер?га? тести у файловому сховищ?, один файл м?стить один тест. ПП дозволя? розпод?ляти запитання по групах, проте групи не мають ??рарх?чно? структури. Система не ма? алгоритму для створення вар?ант?в тесту, але нада? користувачу можлив?сть перем?шування запитань в рамках тесту випадковим чином [13]. Постановка задач?На даний момент ?сну? безл?ч систем тестування, що мають сво? переваги та недол?ки. Основною задачею автоматизованих систем тестування ? створення такого способу вибору запитань до вар?ант?в тесту, який дозволяв би оц?нити не т?льки знання кожного тестованого та знання групи тестованих, а й дозволяв би зробити певн? висновки щодо запитань тесту. В дан?й робот? була зроблена спроба об’?днати способи створення вар?ант?в тесту р?зних систем тестування в один для створення гнучкого алгоритму, котрий дозволя? покращити результативн?сть створення ?ндив?дуальних вар?ант?в та проведення тест?в. Було виявлено наступн? особливост?, котр? необх?дно врахувати [2, 4, 6]:система ??рарх?чного розд?лу тест?в за тематикою;система розпод?лу запитань за р?внем складност? та динам?чно? автоматично? переоц?нки р?вн?в складност? запитань;необх?дн?сть п?дбору типу сховища для зручного збереження ??рарх?чност? розпод?лу тест?в за тематикою;наявн?сть ?дино? бази тестових завдань;наявн?сть ?диного алгоритму розпод?лу запитань по вар?антах тесту.Алгоритми та методи створення вар?ант?в тесту в сучасних автоматизованих системах тестуванняНезважаючи на стр?мкий розвиток комп’ютерних технолог?й та технолог?й машинного навчання, системи тестування, що не дозволяють створення ?ндив?дуальних вар?ант?в тестування, або реал?зують ?х за допомогою перем?шування запитань випадковим чином в межах вар?анту все ще ? поширеними та використовуваними [6-9, 13]. В систем? тестування Education Monitor, як вже було зазначено, алгоритм вибору запитань до вар?анту тесту не дозволя? обирати запитання за р?внем складност? та дозволя? повтор одного запитання в межах вар?анту дек?лька раз?в. Було запропоноване таке р?шення дано? проблеми як використання специф?кац?? консорц?уму IMS (Instructional Management Systems) QTI (Question and Test Interoperability – ун?ф?кован? питання ? тести. Процедура в?дбору та сортування тестових запитань под?ля?ться на три вза?мопов'язан? стад??:побудова посл?довност? об'?кт?в – визначення обмежень, як? будуть застосован? до правил в?дбору ? сортування. Наприклад: Чи може об'?кт бути представлений к?лька раз?в;в?дб?р об'?кт?в – процес, в якому правила в?дбору застосовуються до об'?кт?в. Використання обмежене лише безпосередн?ми доч?рн?ми об'?ктами об’?кта, що м?стить ц? правила;сортування об'?кт?в – процес, в якому в?д?бран? об'?кти розташовуються в порядку, який визнача?ться правилами сортування.Розташування питань ? розд?л?в всередин? батьк?вського об'?кта визначають т? питання, як? потрапляють в область сортування з вза?мозв'язком м?ж обраними об'?ктами (рис. 1.5) [6].Рисунок 1.5 – Структура елементу, що в?дпов?да? за параметри в?дбору запитання до тестового вар?антуЗавдяки так?й структур? доступна п?дтримка наступних правил в?дбору [6, 14-15]: All – обираються вс? об’?кти;Parametrized All – обираються вс? об’?кти з певними властивостями, що характеризуються метаданими об’?кта;Partial – випадковий в?дб?р дек?лькох об’?кт?в;Parameterized Partial – випадковий в?дб?р дек?лькох об’?кт?в, з певними властивостями;Logical – лог?чн? асоц?ац?? об’?кт?в, так? як виб?р одного об’?кта на основ? вибору ?ншого. П?сля вибору необх?дно? к?лькост? об’?кт?в в?дбува?ться ?х сортування за наступними параметрами [6, 14-15]:Sequential – спос?б сортування за якого сортован? об’?кти п?сля застосування правил в?дбору розташовуються в порядку, в якому ц? об’?кти розташовувались у в?дношенн? батьк?вський об’?кт – доч?рн?й об’?кт;Random – спос?б сортування за якого сортован? об’?кти розташовуються випадковим чином;Fixed – спос?б сортування за якого сортован? об’?кти розташовуються в?дпов?дно до порядку в якому вони зустр?чаються.В частин? вже ?снуючих систем тестування знань використовуються так зван? алгоритми адаптивного тестування знань, тобто так?, в яких кожне наступне запитання обира?ться на основ? результат?в одного або к?лькох попередн?х запитань. Загальну блок-схему таких алгоритм?в зображено на рис. 1.6.Рисунок 1.6 – Загальна блок-схема алгоритм?в адаптивного тестуванняОсновною в?дм?нн?стю б?льшост? алгоритм?в адаптивного тестування ? використовуваний п?дх?д до визначення р?вня складност? наступного завдання. Умовно за цим критер??м алгоритми можна под?лити на три групи:алгоритми на основ? ?нформац?? про складн?сть останнього завдання та його результату;алгоритми на основ? ?нформац?? про складн?сть останнього завдання та поточно? оц?нки за тест;алгоритми комб?нованого п?дходу – враховують складн?сть ? правильн?сть вир?шення останнього завдання та теста в ц?лому.Розв’язок задач? визначення складност? наступного завдання в тестовому вар?ант? для вс?х трьох п?дход?в можливо знайти за допомогою теор?? неч?тких множин. Для цього необх?дно посл?довно провести наступн? процедури:провести розрахунок ступеня правильност? розв’язку останнього тестового завдання та/або поточно? оц?нки за тест;виконати фазиф?кац?ю р?вня складност? останнього завдання та ступеня правильност? його розв’язку. На даному етап? розрахован? числов? значення степен?в правильност? в?дпов?д? представляються у вигляд? неч?тких значень одн??? або к?лькох категор?й правильност? (наприклад можуть бути наявн? так? категор??: ?в?дпов?дь в?рна?, ?в?дпов?дь нев?рна?, ?в?дпов?дь частково в?рна?) ? в?дпов?дних цим категор?ям ступен?в належност?, залежно в?д обрано? функц?? належност?;виконати неч?ткий лог?чний вив?д складност? наступного завдання. На даному етап? в залежност? в?д використовуваного типу алгоритму зм?ню?ться к?льк?сть та конструкц?я правил лог?чного виводу;виконати дефазиф?кац?ю складност? наступного завдання, виражено? в неч?тк?й форм?. Отримане на попередньому етап? неч?тке значення складност? наступного завдання приводиться до числового вигляду з використанням функц?й належност? категор?й складност?;Проте даний п?дх?д не було реал?зовано в жодн?й з систем тестування, що можна знайти у в?льному доступ?, також в?н не м?стить функц?оналу для переоц?нки р?вн?в складност? тестових вар?ант?в [16]. В систем? тестування EMM_test було використано ?нший п?дх?д до вир?шення задач? наповнення вар?ант?в тесту завданнями. Ключовими особливостями даного ПП ?:використання модел? ц?лочисельного л?н?йного програмування (ЦЛП) для формування залежностей в?д поточних ц?лей тесту, що дозволять отримати об’?ктивну оц?нку знань тестованого;використання технолог?? автоматично? генерац?? тестових завдань в on-line режим?.Дана система використову?ться на економ?чному факультет? Омського державного ун?верситету ?м. Ф. М. Досто?вського та не ? наявною в?льному доступ?. Задача визначення зм?сту тесту в дан?й систем? вир?шувалась на основ? задач? формування оптимально? структури тесту (ОСТ). Для формування ОСТ спочатку визначаються елементи знань – основн? поняття, властивост?, твердження ? т. д. Ключов? елементи дисципл?ни утворюють основну множину, а решта – додаткову [3; 17-18]. Задача формування ОСТ поставлена наступним чином. Необх?дно знайти наб?р ф?ксованого числа тестових завдань, який забезпечу? перев?рку знань вс?х елемент?в базово? множини та максимального числа елемент?в додатково? множини. Для вир?шення ц??? задач? в?дбува?ться побудова модел? ЦЛП в як?й розм?р тесту ? вх?дним параметром. Вх?дн? обмеження гарантують р?зноман?тн?сть тесту за типами завдань. Також в задач? формування ОСТ врахову?ться складн?сть завдань [17, 19]. Для формування тесту користувачу необх?дно задати розм?р тесту та в?дм?тити, як? з запитань в?дносяться до базово? множини (п?длягають обов’язков?й перев?рц?). На основ? отриманих даних система буду? модель ЦЛП для задач? формування ОСТ, яка розв’язу?ться алгоритмом перебору L-клас?в [20-21]. В результат? користувач отриму? номери завдань на основ? яких будуть генеруватись тести. Якщо задача ЦЛП для заданих параметр?в не ма? розв’язку, то необх?дно зб?льшити к?льк?сть завдань в тест?.Алгоритм розпод?лу запитань до тесту не передбача? адаптивного додавання завдань за р?внем ?х складност?, однак да? змогу реал?зувати один з наступних способ?в створення ун?кальност? вар?ант?в тесту:генерац?я вих?дних числових даних тестового завдання з використанням генератора випадкових чисел;формування вих?дних даних багатоетапних тестових завдань за допомогою спец?альних процедур та збереження ?х в баз? даних [22]. Методи оц?нки р?вн?в складност? запитань в сучасних системах тестування знаньНа основ? розглянутих в попередн?х пунктах даного розд?лу л?тературних джерел та автоматизованих систем тестування можна вид?лити три групи метод?в оц?нки р?вн?в складност? запитань:метод оц?нки складност? запитань користувачем;комб?нований метод оц?нки складност? запитань користувачем та експертно? оц?нки;метод оц?нки складност? запитань на основ? теор?? неч?тких множин.При використанн? методу оц?нки складност? запитань користувачем, р?вень складност? запитання зада?ться користувачем одноразово при створенн? запитання, на основ? його досв?ду та ?нту?тивного розум?ння складност?. Система не нада? зручного ?нтерфейсу для роботи з результатами тестування, тому проводити експертну оц?нку необх?дно повн?стю вручну, працюючи окремо з кожним файлом результату кожного тестованого, що займа? багато часу. Проте б?льша частина систем дозволя? використовувати комб?нований метод оц?нки складност? запитань користувачем та експертно? оц?нки. При створенн? тесту та проведенн? деяко? к?лькост? перших тестувань в?дбува?ться оц?нка адекватност? тесту та надання вагових коеф?ц??нт?в складност? тестовим запитанням, а також розпод?л ?х по категор?ях за складн?стю. Система нада? користувачу змогу отримати результати тестування представлен? у зручному формат? (наприклад в матричному вигляд?, де результати тестування розглядаються за дихотом?чною шкалою: 0 в?дпов?да? неправильно надан?й в?дпов?д?, 1 – правильн?й (табл. 1.1)) завдяки чому користувач може провести необх?дн? розрахунки та оц?нити не лише знання тестованих, а й тестов? завдання. Таблиця 1.1 - Матриця в?дпов?дейСтуденти, iНомер завдання в тест?Сумарний бал кожного студента, Xi123456789101112Student 11101110111008Student 21100100000003Student 30100000000012Student 411111001111110Student 51101010010005Student 61100110000004Student 71100110100005Student 81100110100005Продовження таблиц? 1.1Студенти, iНомер завдання в тест?Сумарний бал кожного студента, Xi123456789101112Student 911011101111110Student 101100110111007К?льк?сть правильних в?дпов?дей, Rj9101487065423Серед характеристик тестування для оц?нки складност? тестового завдання важливо вид?лити наступн? показники:сума (Rj) – число правильних в?дпов?дей на j-те завдання;в?дсоток виконання завдання (RjN?100%), де N- число студент?в, котр? проходили тест;доля правильних в?дпов?дей (Pj) на j-те завдання (Pj=RjN);доля неправильно виконаних завдань (Qj), Qj=1-Pj.Показник Qj – назива?ться ?ндексом складност? завдання. Розрахувавши дан? показники для кожного завдання користувач може визначити необх?дну к?льк?сть р?вн?в складност? завдань та перерозпод?лити завдання за цими р?внями зг?дно ?х ?ндекс?в складност?. Також тестов? завдання, ?ндекс складност? яких менше 20% або б?льше 80% як правило коригують або вилучають з тесту. У випадку коли необх?дно провести критер?ально-ор??нтован? тести, наприклад так?, що направлен? на перев?рку засво?ння способ?в розв’язку типових задач, завдання з високим та низьким ?ндексами складност? можуть бути залишен? в тест?. Жодна з ?снуючих на даний момент у в?льному доступ? систем тестування не веде автоматичного розрахунку та в?дображення в зв?т? з результатами тестування даних статистичних показник?в. Деяк? автоматизован? системи тестування дозволяють автоматичний перерозпод?л тест?в за р?внями складност?, однак вони м?стять задану ф?ксовану к?льк?сть р?вн?в, а також не в?дображають критер??в розрахунку, тому оц?нити правильн?сть ?х роботи складно. Також дан? системи потребують придбання та встановлення платного л?ценз?йного програмного забезпечення (ПЗ) [23-26]. 1.5 Висновок до розд?луСтворення як?сно? автоматизовано? системи тестування знань в навчальних закладах ? актуальною задачею для покращення сучасно? осв?ти та полегшення роботи викладача. Така система дозволить спростити та пришвидшити процес тестування в навчальному заклад?, а також дозволить отримати максимально об’?ктивний результат. На даний час ?сну? велика к?льк?сть систем тестування, однак мало з них спрямован? саме на проведення тестування в навчальних закладах, що призводить до деяких незручностей при ?х використанн?. Основною задачею, що необх?дно вир?шити при створенн? автоматизовано? системи тестування знань ? п?дх?д до створення ?ндив?дуальних вар?ант?в тесту. На основ? розглянутого теоретичного та практичного матер?алу можна в?дм?тити дек?лька основних недол?к?в, що необх?дно врахувати при створенн? алгоритму:повтори запитань в рамках вар?анту тесту;створення ?ндив?дуальних вар?ант?в тесту за рахунок перем?шування запитань всередин? вар?анту випадковим чином;в багатьох системах для створення вар?ативних тест?в необх?дно мати навички програмування;файлова система збереження даних. Збереження даних за допомогою бази даних потребу? меншого об’?му пам’ят?, а також дозволя? збер?гати ??рарх?чн?сть структури даних;в?дсутн?сть гнучко? параметризац??, тобто неможливо створивши один тест запускати його з р?зними параметрами;неч?тка структура завдань. В б?льшост? розглянутих систем тестування користувачу надано можлив?сть групувати завдання за р?внями складност?, типами або темами, проте в?дсутня можлив?сть створення складно? ??рарх?чно? залежност?. Також в деяких системах запитання не може належати до дек?лькох груп одночасно, тобто можливо класиф?кувати запитання лише за одним параметром, наприклад за темою чи складн?стю;в?дсутн?сть ?нструмент?в для оц?нки результат?в тестування та автоматичного кал?брування тест?в на ?х основ?;в?дсутн?сть експертно? оц?нки р?вн?в складност? тестових завдань. Деяк? з розглянутих систем тестування не надають користувачу можливостей зручно? роботи з результатами тестування, що призводить до унеможливлення переоц?нки тестових завдань з урахуванням результат?в ?х проходження;непрозор?сть та неможлив?сть контролю оц?нки складност? завдань в системах що дозволяють ?? динам?чну зм?ну.Поряд з недол?ками кожна система м?стить певн? переваги в реал?зованому в н?й п?дход? до розпод?лення тестових завдань по вар?антах притаманн? лише ?й, як? можна по?днати в одн?й систем?:ч?тка ??рарх?чна структура запитань;незалежн?сть под?лу запитань за р?внем складност? та темою;адаптивн? алгоритми розпод?лу запитань по вар?антах;автоматична динам?чна переоц?нка р?вн?в складност? запитань. При по?днан? з? зручним способом представлення результат?в даний процес ста? прозорим та контрольованим з боку користувача. Також можливе задання користувачем додаткових параметр?в, таких як допустим? меж? к?лькост? р?вн?в складност?, та критер?? належност? запитань до одного р?вня, адже запитання р?зних тип?в можуть мати р?зн? критер?? в?днесення до одних ? тих самих р?вн?в складност?.Врахування даних фактор?в при вибор? п?дходу до створення ?ндив?дуальних тестових вар?ант?в дасть змогу створити систему, котра дозволить не лише проводити тестування з метою оц?нювання знань тестованого, а й надасть можлив?сть контролю за завданнями, ?х складн?стю та коректн?стю, а також контролю р?вня засво?ння знань в межах конкретних тем. Важливою функц??ю системи тестування ? не лише процес створення та проведення тест?в, а й обробка результат?в тестування для представлення зв?т?в та анал?зу не лише ступеня засво?ння студентами матер?алу, а тестових завдань з метою ?х вдосконалення та р?вном?рного розпод?лу запитань по вар?антах тесту. РОЗД?Л 2 АЛГОРИТМ ?НДИВ?ДУАЛЬНОГО ВИБОРУ ЗАПИТАНЬ ДО ВАР?АНТ?В ТЕСТУ З УРАХУВАННЯМ ??РАРХ?ЧНОСТ? СТРУКТУРИ ДАНИХ2.1 Структура збереження даних в систем? тестуванняВ системах тестування з? збереженням даних в реляц?йних СКБД тестов? запитання можуть мати дек?лька категор?й до яких вони належать: тип, р?вень складност?, тему, тощо. Однак для б?льш детального розпод?лу в рамках одн??? категор?? необх?дно створювати нов? поля та нов? таблиц?, що призводить до перевантаження даних та ускладнення структурних зв’язк?в, оск?льки також необх?дно встановити р?вн? вкладеност? тем, що ? складною задачею для реляц?йних СКБД. В системах з? збереженням кожного тесту у вигляд? окремого файлу неможливе повторне застосування вже ?снуючо? ??рарх?? – для незначного розширення тесту опц?ональними завданнями необх?дно створити новий файл на основ? ?снуючого з в?дпов?дними параметрами. Для спрощення роботи з даними необх?дно обрати в?дпов?дний спос?б збереження даних, який дозволя? збер?гати ??рарх?чн?сть структури даних. В рамках дано? роботи було розглянуто модел? даних представлен? на рис 2.1 та обрано ??рарх?чну модель, оск?льки вона дозволя? реал?зувати максимально зручний спос?б збереження структури даних з можлив?стю в?зуал?зац?? для зручност? роботи з даними. Технолог?ю реал?зац?? ц??? модел? буде розглянуто в наступному розд?л? дано? роботи [27-28].Рисунок 2.1 – Модел? даних2.2 Алгоритм вибору запитань до ?ндив?дуального вар?анту тестуОск?льки було обрано ??рарх?чну модель даних, для створення вар?ант?в тесту необх?дно п?д?брати алгоритм вибору запитань, що враховуватиме не лише так? характеристики як складн?сть та тип запитання, а й специф?чну структуру даних. Для цього було розглянуто методи для пошуку по дереву. Серед них було обрано метод Монте-Карло для пошуку по дереву, а саме його верс?ю Upper Confidence bound applied to Trees (UCT). В основ? даного алгоритму використову?ться алгоритм Upper-Confidence-Bound (UCB). Для реал?зац?? методу Монте-Карло для пошуку по дереву необх?дно представити проходження тесту у вигляд? гри, в як?й гравець (тестований) з певною ймов?рн?стю правильно в?дпов?да? на запитання. Перемогою вважатиметься усп?шне проходження тесту (набрано м?н?мальну необх?дну к?льк?сть бал?в). Виб?р запитань зд?йсню?ться з дерева запитань на основ? алгоритму комб?нованого п?дходу, тобто з урахуванням поточного результату за тест та правильност? в?дпов?д? на поточне запитання ? його р?вня складност? [16], причому пр?оритетним ? виб?р запитання з т??? ж г?лки, що й попередн?.В рамках задано? предметно? област? алгоритм UCB можна сформулювати наступним чином [29]:?н?ц?ал?зац?я. Тест пройдено певною групою тестованих, тобто кожне запитання ма? св?й р?вень складност? та частку правильних в?дпов?дей. На кожн?й наступн?й ?терац?? запитання обира?ться наступним чином:wini +lnnni → max,де wi – к?льк?сть набраних бал?в на i запитань (для запитань, що не належать до т??? само? г?лки, що й попередн? обчислю?мо з коеф?ц??нтом 0,9);ni – к?льк?сть в?дв?дувань i-того вузла (додавання певного запитання);n – к?льк?сть в?дв?дувань сус?дн?х вузл?в (додавання запитання з ?ншо? г?лки дерева).Саме друга складова дано? формули забезпечу? п?сля певно? к?лькост? проходжень виб?р запитань з меншим пр?оритетом (тобто з ?ншо? г?лки). Алгоритм UCT використову? п?дх?д UCB для пошуку по дереву та склада?ться з наступних стад?й [16, 29-31]:Виб?р. Вузли на кожному етап? вибираються зг?дно з алгоритмом UCB. Ця фаза д?? до тих п?р, поки не буде знайдений вузол в якому ще не вс? доч?рн? вузли мають статистику усп?шност? проходження тесту. На рис. 2.2 перше значення у вузл? це к?льк?сть набраних бал?в, друге загальна можлива на даному етап? к?льк?сть бал?в.Рисунок 2.2 – Приклад вигляду дереваРозширення. Коли алгоритм UCB б?льше не може бути застосовний, дода?ться новий доч?рн?й вузол (дода?ться нове запитання тесту). Глибина дерева обмежена к?льк?стю запитань у вар?ант? тесту. Симуляц?я. Середн?й рейтинг тестованих для даного тесту береться за ймов?рн?сть надання правильно? в?дпов?д? на запитання, якщо тестований вже проходив тести та ма? певний середн?й результат, то при створенн? ?ндив?дуального вар?анту для такого тестованого береться його середн?й результат. В?дбува?ться симуляц?я проходження тесту.Зворотн? розповсюдження. На цьому етап? ?нформац?я поширю?ться вгору по дереву, оновлюючи ?нформац?ю в кожному з ран?ше пройдених вузл?в. Кожен з цих вузл?в зб?льшу? показник к?лькост? раз?в входження запитань до тесту, а вузли, що зб?гаються з усп?шно пройденим тестом, зб?льшують також ? к?льк?сть перемог. В к?нц? алгоритму вибира?ться вузол, в?дв?даний найб?льшу к?льк?сть раз?в.2.3 Застосування модиф?кованого алгоритму k-means++ для переоц?нки р?вн?в складност? запитаньПочаткова оц?нка складност? кожного запитання зада?ться викладачем зг?дно з його ?нту?тивного розум?ння складност? запитань. Однак п?сля певно? к?лькост? проведених тестувань, може з’ясуватися, що така оц?нка була помилковою та складн?сть виника? в зовс?м ?нших запитаннях. Таким чином виника? необх?дн?сть переоц?нки складност? запитань в тест?. За наявност? сучасних технолог?й та безл?ч? перев?рених алгоритм?в кластеризац?? нема? необх?дност? робити це вручну, достатньо задати необх?дну к?льк?сть кластер?в, тобто р?вн?в складност? та запустити алгоритм.В рамках дано? задач? було обрано алгоритм k-means, оск?льки в?н ? простим у використанн? та реал?зац??. В?н розбива? безл?ч елемент?в векторного простору на заздалег?дь в?доме число кластер?в k. Алгоритм прагне м?н?м?зувати середньоквадратичне в?дхилення на точках кожного кластера. Основна ?дея поляга? в тому, що на кожн?й ?терац?? переобчислюються центр мас для кожного кластера, отриманого на попередньому кроц?, пот?м вектори розбиваються на кластери знову в?дпов?дно до того, який з нових центр?в виявився ближчим за обраною метрикою. Алгоритм завершу?ться, коли на ?терац?? не в?дбува?ться зм?ни кластер?в. До недол?к?в алгоритм? можна в?днести [32]:необх?дн?сть заздалег?дь знати к?льк?сть кластер?в. Однак даний недол?к алгоритму ? несутт?вим в рамках поставлено? задач?, оск?льки необх?дна к?льк?сть р?вн?в складност? зада?ться користувачем;алгоритм чутт?вий до вибору початкових центр?в кластер?в. Цей недол?к можна компенсувати використанням модиф?ковано? верс?? алгоритму k-means++.Отже, застосовуваний в дан?й робот? модиф?кований алгоритм k-means++ вигляда? наступним чином [16, 33-36]:Користувач зада? необх?дне число кластер?в (вже наявн? р?вн? складност? в тест?).Перший центр кластеру ?1(0) (запитання) обира?ться випадковим чином.Розраховуються в?дстан? до ?нших елемент?в. Розрахунок в?дбува?ться за формулою Евкл?дово? в?дстан?:d(xi,xj)=(pi-pj)2,де xi, xj – запитання м?ж якими необх?дно розрахувати в?дстань; pi, pj – частка правильних в?дпов?дей на дан? запитання.Обираються наступн? центри кластер?в ?i(0) з ймов?рн?стю 1d2 в?д найближчого вже обраного центра. Елементи розпод?ляються по кластерам в?дпов?дно до м?н?мально? в?дстан? до ?х центр?в, розраховано? за формулою Евкл?дово? в?дстан?.В?дбува?ться перерозрахунок центр?в кластер?в:?i(k)=1|Si|x?Six,де ?i(k) – центр кластеру на в?дпов?дн?й ?терац??; Si – к?льк?сть елемент?в в кластер? Si.Викону?ться перев?рка умови зупинки. Якщо ?i(k)- ?ik-1< ?, то алгоритм припиня? роботу, ?накше – повтор пп.5-6. ? – задана допустима похибка, ?= 10-5.2.4 Висновок до розд?луРозробка ефективного способу створення ?ндив?дуальних тестових вар?ант?в одне з основних завдань створення як?сно? системи тестування. Для створення тесту, що да? змогу ефективно перев?ряти знання з певно? теми, не лише поверхневих момент?в, а й специф?чних ?? нюанс?в, необх?дно збереження ??рарх?чност? структури даних. Для цього зг?дно з проанал?зованих способ?в збереження даних було обрано ??рарх?чну модель даних. Також було обрано один з найпоширен?ших метод?в пошуку по дереву з необх?дними модиф?кац?ями для реал?зац?? ефективного вибору запитань до вар?ант?в тесту. Обрано та реал?зовано метод автоматично? переоц?нки р?вн?в складност? запитань на основ? результат?в проходження тесту за допомогою модиф?кованого алгоритму k-means++ з вибором в?дпов?дних параметр?в для оц?нки в?дстаней. РОЗД?Л 3 ТЕХНОЛОГ?? РЕАЛ?ЗАЦ?? ПРОГРАМНОГО ПРОДУКТУ3.1 Виб?р бази даних для ??рарх?чно? модел? даних. Схема бази данихОсновною перевагою графових баз даних ? ун?версальн?сть, адже в них можна збер?гати ? реляц?йн?, ? документарн? ? складн? семантичн? дан?. А сама модель побудови БД може зм?нюватися ? модиф?куватися в процес? розвитку додатки без зм?ни арх?тектури ? вих?дних запит?в. З ?ншого боку, при незначн?й к?лькост? зв'язк?в ? великих обсягах даних графов? БД демонструють значно б?льш низьку продуктивн?сть. Отже, до основних переваг використання графово? бази даних в дан?й задач? можна в?днести [37-39]:продуктивн?сть. Обх?д графа в графов?й баз? даних може виконуватись за певним типом ребер або по всьому графу. Обх?д з’?днань та вза?мозв’язк?в в графових базах даних викону?ться швидко, оск?льки вза?мозв’язки м?ж вузлами не обчислюються п?д час виконання запиту, а збер?гаються в баз? даних; гнучк?сть. Нов? види вза?мозв’язк?в, нов? вузли, м?тки, нов? п?дграфи можна додавати в ?снуючу структуру не порушуючи ?снуючих запит?в та функц?оналу ПП. Завдяки гнучкост? графово? модел? нема? необх?дност? попередньо моделювати задачу з високим р?внем детал?зац??.Для реал?зац?? в даному ПП в якост? графово? бази даних було обрано Neo4j – графову СКБД з в?дкритим вих?дним кодом реал?зовану на Java. Дана СКБД ма? власну мову запит?в Cypher (рис 3.1-3.2). Новий движок збер?гання даних в Neo4j 3.0 усува? обмеження масштабованост? БД попередньо? верс??. Також даний рел?з ма? нов? драйвери до мов програмування Java, .NET, JavaScript ? Python [40].Рисунок 3.1 – Частина запиту на Cypher для в?дображення графу запитань тестуРисунок 3.2 – Результат запиту на Cypher для в?дображення графу запитань тестуНа рис. 3.3 продемонстровано частину графу з тестовими запитаннями та ?х ??рарх?чну структуру. Рисунок 3.3 – Частина графу з запитаннями тесту з англ?йсько? мовиНа рис. 3.4 можна побачити структуру вузла з конкретним запитанням представлену в JSON формат?. Кожен вузол запитання ма? наступн? властивост?:текст запитання;тип запитання;р?вень складност? запитання;тема запитання;частка правильних в?дпов?дей;ск?льки раз?в запитання було обрано до тесту.Рисунок 3.4 – Властивост? вузла запитання Кожен вузол з в?дпов?ддю для запитань з вибором одн??? або к?лькох правильних в?дпов?дей м?стить наступн? властивост? (рис. 3.5):текст в?дпов?д?;правильна вона чи н?.Рисунок 3.5 – Властивост? вузла в?дпов?д?3.2 Виб?р мови програмування та необх?дних б?бл?отекВ якост? мови програмування, що в?дпов?да? за реал?зац?ю доступу до бази даних та необх?дного математичного апарату було обрано python 3. Python 3 ма? наступн? переваги, що ? актуальними для вир?шення поставлено? задач? [41]:дана мова програмування ма? прост? ?нту?тивно зрозум?л? драйвери для роботи з графовими та реляц?йними СКБД, що дозволя? зручно ?нтегрувати розроблений модуль до вже ?снуючих ПП по?днуючи використання СКБД р?зних тип?в за необх?дност?;наявна велика к?льк?сть б?бл?отек з вже готовою реал?зац??ю велико? к?лькост? алгоритм?в, нейронних мереж та ?нших метод?в машинного навчання, а також б?бл?отека TensorFlow для реал?зац?? алгоритм?в користувача;наявна велика к?льк?сть б?бл?отек з вже готовою реал?зац??ю велико? к?лькост? алгоритм?в, нейронних мереж та ?нших метод?в машинного навчання;наявна велика к?льк?сть б?бл?отек для роботи з даними, ?х представлення та в?зуал?зац??.До основних недол?к?в python можна в?днести низьку швидкод?ю, однак в рамках поставлено? задач? нема? необх?дност? оброблювати надвелик? масиви даних, тому наявно? швидкод?? достатньо.В якост? драйвера для роботи з Neo4j було обрано py2neo, оск?льки в?н ? простим у використанн?, м?стить детальну документац?ю регулярно оновлювану з? зм?ною верс?? та поширений у використанн? ? тому можна легко знайти в?дпов?д? на запитання, що можуть виникнути в процес? використання [42]. Для роботи з даними та реал?зац?? алгоритм?в було обрано [41]:Scikit-Learn – зручна б?бл?отека, що м?стить велику к?льк?сть вже реал?зованих метод?в машинного навчання. Дана б?бл?отека м?стить вже готову реал?зац?ю модиф?кованого k-means++;NumPy – м?стить необх?дний математичний апарат для роботи з даними, виконання складних обчислень, роботи з багатовим?рними масивами;Pandas – для представлення даних в необх?дному вигляд? та спрощення ?х оброблення та анал?зу;Matplotlib – для представлення даних в зручному вигляд?.3.3 Анал?з результат?в роботи ППРобота даного ПП була перев?рена на тест? на знання час?в з англ?йсько? мови, частину запитань можна знайти на сайт? з онлайн-тестами з англ?йсько? мови [42]. Створення ??рарх?чно? модел? даних з наявних запитань було виконано спираючись на ?нту?тивне розум?ння та власний досв?д. Вигляд структури тесту можна побачити на рис. 3.6. Рисунок 3.6 – Схема ??рарх?чно? модел? даних тесту на знання час?вР?вн? складност? також були визначен? на основ? власного досв?ду та ?нту?тивного розум?ння. Тест м?стить тридцять запитань, двадцять з них вибираються до тестового вар?анту реал?зованим у даному ПП методом. На рис. 3.7-3.8 можна побачити зм?ни р?вн?в складност? п?сля проходження тесту в?дпов?дно 10 та 50 тестованими. Можна пом?тити сутт?в? зм?ни, звернувши увагу на як? викладач зможе скорегувати план навчання та виявити аспекти на як? сл?д звернути увагу.Рисунок 3.7 – Початковий розпод?л р?вн?в складност? запитань та п?сля проходження 10 тестованимиРисунок 3.8 – Початковий розпод?л р?вн?в складност? запитань та п?сля проходження 50 тестованими3.4 Висновок до розд?луПроектування арх?тектури та врахування необх?дних функц?ональних можливостей ? важливим аспектом розробки ПП. В даному розд?л? було виконано анал?з функц?ональних вимог розроблюваного ПП та п?д?брано технолог?? реал?зац??, як? забезпечать в?дпов?дн?сть ПП поставленим вимогам. Технолог?? реал?зац?? було обрано з урахуванням зручност? ?х сум?сного використання, а також необх?дност? зручно? ?нтеграц?? даного ПП з ?ншими системами. Було обрано сучасну мову програмування, що дозволя? легко реал?зувати необх?дний математичний апарат, а також зручно працювати з БД р?зних вид?в.РОЗД?Л 4 РОЗРОБЛЕННЯ СТАРТАП-ПРОЕКТУУ даному розд?л? буде розглянуто ключов? особливост? розроблено? системи як майбутнього стартап-проекту. Проект розглядатиметься як програмний модуль для систем тестування для створення алгоритму вибору запитань до вар?ант?в тесту.Опис ?де? проектуСпочатку проанал?зу?мо та подамо у вигляд? таблиц? зм?ст ?де? стартап-проекту, можлив? напрямки застосування та основн? вигоди, як? може отримати користувач товару. Ц? характеристики стартап-проекту зображено в таблиц? 4.1.Таблиця 4.1 – Опис ?де? стартап-проектуЗм?ст ?де?Напрямки застосуванняВигоди для користувачаПрограмний додаток для створення алгоритму для вибору запитань до вар?ант?в тесту в системах тестування.1. Застосування як системи для використання автоматизованого п?дбору запитань в тест з урахуванням в?дпов?дей студента.Можлив?сть створювати ?ндив?дуальн? навчальн? тести в?дпов?дно до р?вня знань студента.М?н?мальн? витрати на апаратне забезпечення (сервер).2. Застосування для отримання ??рарх?чно впорядковано? структури запитань тесту.Спрощення сприйняття ?нформац?? щодо результат?в тестування.Тепер зробимо анал?з потенц?йних техн?ко-економ?чних переваг ?де? пор?вняно ?з пропозиц?ями конкурент?в. Результати анал?зу зображено в таблиц? 4.2.Таблиця 4.2 – Визначення сильних, слабких та нейтральних характеристик ?де? проекту№ п/пТехн?ко-економ?чн? характерис-тики ?де?Товари/концепц?? конкурент?вW (слабка сторона)N (нейтральна сторона)S (сильна сторона)М?й проектКонку-рент 1Конку-рент 21.Ц?на1000$/ р?к2000$/ р?к2000$/ р?к+2.Прибутки3000$/ р?к4000$/ р?к5000$/ р?к+3.Контроль якост?Анал?-тики, користувач?, прог-рам?стиАнал?-тики, користувач?, прог-рам?стиАнал?-тики, користувач?, прог-рам?сти+4.Динам?ка галуз?ШвидкаШвидкаШвидка+5.Пост?йн? витрати1000$/ р?к2000$/ р?к1500$/ р?к+6.Зм?нн? витрати1000$ -3000$/ р?к1000$ -2000$/ р?к2000$ -5000$/ р?к+7.Патенти на продуктиНема?Патент на кожний проектДек?лька патент?в на винах?д+Продовження таблиц? 4.2№ п/пТехн?ко-економ?чн? характери-тики ?де?Товари/концепц?? конкурент?вW (слабка сторона)N (нейтральна сторона)S (сильна сторона)М?й проектКонку-рент 1Конку-рент 28.Гнучк? ц?ниЦ?на ?динаЦ?на вар?ю-?ться з року в р?кЦ?на ?дина+9.Законо-давч? обмеженняНема?Нема?Нема?+Технолог?чний аудит ?де? проектуВизначимо технолог?чну зд?йсненн?сть ?де? проекту за допомогою анал?зу таких складових, як технолог??, за якою буде виготовлено товар зг?дно ?де? проекту, ?снування таких технолог?й, чи ?х необх?дно розробити / доробити, доступн?сть таких технолог?й авторам проекту. Результати даного анал?зу зображено в таблиц? 4.3.Таблиця 4.3 – Технолог?чна зд?йсненн?сть ?де? проекту?дея проектуТехнолог?? ?? реал?зац??Наявн?сть технолог?йДоступн?сть технолог?йСтворення програмного продукту що реал?зу? алгоритму для вибору запитань до вар?ант?в тесту в системах тестування.Технолог?я роботи з базами даних Neo4j.ТакДан? технолог?? доступн?.Технолог?я глибокого навчання Scikit-Learn.ТакДан? технолог?? доступн?, функц?оналу не вистача? для поставлених задач.Продовження таблиц? 4.3?дея проектуТехнолог?? ?? реал?зац??Наявн?сть технолог?йДоступн?сть технолог?йСтворення програмного продукту що реал?зу? алгоритму для вибору запитань до вар?ант?в тесту в системах тестування.Технолог?я для обробки даних з застосуванням машинного навчання TensorFlow. ТакДан? технолог?? доступн?.Обрана технолог?я реал?зац?? ?де? проекту: глибокого навчання (Scikit-Learn.), обробки тексту з застосуванням машинного навчання (TensorFlow). Анал?з ринкових можливостей запуску стартап-проектуПроведемо анал?з попиту: наявн?сть попиту, обсяг, динам?ка розвитку ринку. Результати даного анал?зу зображено в таблиц? 4.4. Таблиця 4.4 – Попередня характеристика потенц?йного ринку стартап-проекту№ п/пПоказники стану ринку (найменування)Характеристика1К?льк?сть головних гравц?в, од22Загальний обсяг продаж, грн/ум.од400?0003Динам?ка ринку (як?сна оц?нка)Зроста?4Наявн?сть обмежень для входу (вказати характер обмежень)Висока точн?сть класиф?кац??, швидкод?я, невибаглив?сть до ресурс?в5Специф?чн? вимоги до стандартизац?? та сертиф?кац??Нема?6Середня норма рентабельност? в галуз? (або по ринку), %70Таким чином, за попередн?м оц?нюванням, ринок ? привабливим для входження. Надал? визначимо потенц?йн? групи кл??нт?в, ?х характеристики, та сформу?мо ор??нтовний перел?к вимог до товару для кожно? групи. Ц? дан? зображено в таблиц? 4.5.Таблиця 4.5 – Характеристика потенц?йних кл??нт?в стартап-проекту№ п/пПотреба, що форму? ринокЦ?льова аудитор?я (ц?льов? сегменти ринку)В?дм?нност? у повед?нц? р?зних потенц?йних ц?льових груп кл??нт?вВимоги споживач?в до товару1Об’?ктивна система тестування знаньНавчальн? закладиНавчальним закладам буде потр?бно мати панель для адм?н?страц?? наявних в систем? акаунт?в. При цьому заплативши м?н?мум грошей на сервери.Кл??нти прагнуть отримати систему для автоматизац?? тестування знань, яка ма? гнучкий алгоритм вибору запитань в тести. Також прагнуть точност? та швидкод?? в?д системи.П?сля визначення потенц?йних груп кл??нт?в проведемо анал?з ринкового середовища: складемо таблиц? фактор?в, що сприяють ринковому впровадженню проекту (таблиця 4.6), та фактор?в, що йому перешкоджають (таблиця 4.7).Таблиця 4.6 – Фактори загроз№ п/пФакторЗм?ст загрозиМожлива реакц?я компан??1В?дсутн?сть попитуЦ?льова аудитор?я може не оц?нити переваги продуктуАкцентувати увагу на кл??нтах, що вже скористалися продуктом, якщо так? ?, навести ?нфограф?ку результативност? (оч?кувану), запропонувати знижку потенц?йному кл??нту в рамках тендеру.2Неточна робота алгоритмуНеправильно задана структура даних та недостатньо точно проведене налаштування системи можуть призвести до зниження точност? роботи алгоритмуРозробка ? випуск та п?дтримка ?нструкц?? користувача з детальними поясненнями та в?дпов?дями на часто виникаюч? запитання, впровадження зворотного зв’язку та системи п?дтримки користувача.Таблиця 4.7 – Фактори можливостей№ п/пФакторЗм?ст можливост?Можлива реакц?я компан??1Кобренд?нгПропозиц?я в?д певно? компан??, що спец?ал?зу?ться на системах автоматизац?? тестування, розробити сп?льний продуктВид?лення частини штату на реал?зац?ю проекту, п?дготовка акц?йних пропозиц?й по переходу на новий продукт ?снуючим кл??нтам. Надал? проведемо анал?з пропозиц??: визначимо загальн? риси конкуренц?? на ринку. Результати даного анал?зу зображен? в таблиц? 4.8.Таблиця 4.8 – Ступеневий анал?з конкуренц?? на ринкуОсобливост? конкурентного середовищаВ чому проявля?ться дана характеристикаВплив на д?яльн?сть п?дпри?мства (можлив? д?? компан??, щоб бути конкурентоспроможною)1. Чиста конкуренц?яГравц? ринку не мають явних переваг один над однимБ?льш виг?дн? умови на тендерах, агресивний маркетинг2. Рег?ональна конкуренц?яГравц? ринку – ?нтернац?ональн? п?дпри?мстваВих?д на т? ринки, як? ще не зайнят? конкурентами3. Внутр?шньогалузева конкуренц?яГравц? ринку знаходяться в одн?й галуз? – розробц? ПЗ4. Товарно-видова конкуренц?яУс? продукти гравц?в ринку мають одне призначенняРозробка найб?льш ?нту?тивного ?нтерфейсу, оптим?зац?я алгоритм?в зг?дно з потребами користувач?в5. Конкурентн? переваги нец?нов?Продукти в?др?зняються гнучк?стю, функц?оналом (незначно) ? над?йн?стю.У маркетингу неявно пор?внювати власний продукт з ?ншими, робити виг?дн? ц?нов? пропозиц??6. Марочна конкуренц?яЗначна увага прид?ля?ться бренду, що розробив продуктКобренд?нгТепер визначимо та об?рунту?мо фактори конкурентоспроможност?, як? зображен? в таблиц? 4.9.Таблиця 4.9 – Об?рунтування фактор?в конкурентоспроможност?№ п/пФактор конкурентоспроможност?Об?рунтування (наведення чинник?в, що роблять фактор для пор?вняння конкурентних проект?в значущим)1Невибаглив?сть до апаратних ресурс?в (сервер?в). А отже дешевизна апаратних ресурс?в, потр?бних для нашо? системиВ продукт? використане по?днання класичних метод?в структурування даних та метод?в машинного навчання2Швидкод?яВ продукт? використане по?днання класичних метод?в структурування даних та метод?в Машинного навчання3?нтеграц?яПродукт не потребу? придбання спец?ал?зованого апаратного забезпечення4Модульн?стьПродукт представлено у вигляд? веб-додатку5Гнучк?стьКожен замовник ма? можлив?сть замовити розширення функц?оналу продукту п?д його конкретн? задач?6Алгоритм додавання запитань в тест?Користувач? мають змогу використовувати алгоритм, що обира? запитання до тесту базуючись на попередн?х в?дпов?дях тестованогоТаблиця 4.10 – Анал?з конкуренц?? в галуз? за М. ПортеромСкладов? анал?зуПрям? конкуренти в галуз?Потенц?йн? конкурентиПостачальни-киКл??нтиТовари-зам?нникиДинам?ка галуз?, продуктова л?н?я, бар’?ри проникнен-няНаявн?сть товарних знак?в, доступ до ресурс?в, патенти на продуктиКонцентрац?я постачальни-к?в, диференц?ац?я витратР?вень чутливо-ст? до зм?ни ц?н, прибутки, контроль якост?Ц?на, лояльн?сть спожива-ч?вВиснов-ки:Конкурен-ц?я не ? ?нтенсив-ною, адже даний ринок ще н?ким не зайнятий.Для входу на ринок необх?дно створити товарний знак та написати бета-верс?ю програм-ного продукту. На даний момент потенц?й-них конкурент?в нема?.Постачаль-ники не диктують умови роботи на ринку, бо програмному продукту не потр?бно постачання.Кл??нти диктують умови роботи на ринку, бо вони ? ?диним джерелом прибутку компан??.При наявност? товар?в зам?нник?в необх?дно буде зменшува-ти ц?ну програм-ного продукту.За визначеними факторами конкурентоспроможност? проведемо анал?з сильних та слабких стор?н стартап-проекту. Результати даного анал?зу зображено в таблиц? 4.11.Таблиця 4.11 – Пор?вняльний анал?з сильних та слабких стор?н програми№ п/пФактор конкуренто-спроможност?Бали 1-20Рейтинг товар?в-конкурент?в –3–2–10+1+2+31?нтеграц?я17*2Модульн?сть18*3Гнучк?сть16*4Алгоритм додавання запитань в тест?17*Тепер проведемо SWOT-анал?з на основ? вид?лених загроз ? можливостей, та сильних ? слабких стор?н проекту. SWOT-матриця зображено в таблиц? 4.12.Таблиця 4.12 – SWOT-анал?з стартап-проектуСильн? сторони: алгоритм створення ?ндив?дуальних вар?ант?в тесту, невибаглив?сть до обчислювальних ресурс?в, швидкод?яСлабк? сторони: Програмний продукт на даний момент можна використовувати лише у вигляд? додаткового встановлюваного модуля для ?снуючих ППМожливост?: Кобренд?нгЗагрози: Неточн?сть алгоритму, в?дсутн?сть попитуНа основ? SWOT-анал?зу розробимо альтернативи ринково? повед?нки для виведення стартап-проекту на ринок та ор??нтований оптимальний час ?х ринково? реал?зац?? з огляду на потенц?йн? проекти конкурент?в, що можуть бути виведен? на ринок. Дан? альтернативи зображено в таблиц? 4.13.Таблиця 4.13 – Альтернативи ринкового впровадження стартап-проекту№ п/пАльтернатива (ор??нтовний комплекс заход?в) ринково? повед?нкиЙмов?рн?сть отримання ресурс?вСтроки реал?зац??1Реал?зац?я можливост? використання системи не т?льки на веб-сайтах, а й десктопних та телефонних додаткахСередня24 м?сяц?2Розробка MVPВисока12 м?сяц?вСеред даних альтернатив було обрано другу альтернативу, адже строки ?? реал?зац?? найменш? та найвища ймов?рн?сть отримання ресурс?в.Розроблення ринково? стратег?? проектуДля розроблення ринково? стратег?? першим кроком необх?дно описати ц?льов? груп потенц?йних споживач?в, як? можна побачити в таблиц? 4.14.Таблиця 4.14 – Виб?р ц?льових груп потенц?йних споживач?в№ п/пОпис проф?лю ц?льово? групи потенц?йних кл??нт?вГотовн?сть споживач?в сприйняти продуктОр??нтов-ний попит в межах ц?льово? групи (сегменту)?нтенсив-н?сть конкуренц?? в сегмент?Простота входу у сегмент1.Вузькоспец?ал?зован? навчальн? закладиСередня3-5 заклад?в в р?кСередняСкладна2.Навчальн? заклади базового р?вня (школи, л?це?, г?мназ??)Готов?5-10 заклад?в в р?кСлабкаСередня3.Вищ? навчальн? закладиГотов?3-5 заклад?в в р?кСередняСкладнаБуло обрано ц?льову групу навчальних заклад?в базового р?вня.Для роботи в обраних сегментах ринку необх?дно сформувати базову стратег?ю розвитку, яку ображено в таблиц? 4.15. Таблиця 4.15 – Визначення базово? стратег?? розвиткуСтратег?я охоплення ринкуКлючов? конкурентоспроможн? позиц?? в?дпов?дно до обрано? альтернативиБазова стратег?я розвиткуКонцентрац?я на потребах одного ц?льового сегменту – веб-сайтах.Створений продукт ? дешевим у використанн? та ?новац?йнимСтратег?я спец?ал?зац??.Наступним кроком ? виб?р стратег?? конкурентно? повед?нки, яку зображено в таблиц? 4.16.Таблиця 4.16 – Визначення базово? стратег?? конкурентно? повед?нкиЧи ? проект ?першопрох?д-цем? на ринку?Чи буде компан?я шукати нових споживач?в, або забирати ?снуючих у конкурент?в?Чи буде компан?я коп?ювати основн? характеристики товару конкурента, ? як??Стратег?я конкурентно? повед?нкиТак.Компан?я буде шукати нових споживач?в, але ?, за потреби, буде намагатися забирати ?снуючих у конкурент?в.Компан?я, за потреби, буде коп?ювати характеристики конкурент?в.Стратег?я заняття конкурентно? н?ш?.Тепер розробимо стратег?ю позиц?онування, що поляга? у формуванн? ринково? позиц?? (комплексу асоц?ац?й), за яким споживач? мають ?дентиф?кувати торг?вельну марку/проект. ?? зображено в таблиц? 4.17. Таблиця 4.17 – Визначення стратег?? позиц?онуванняВимоги до товару ц?льово? аудитор??Базова стратег?я розвиткуКлючов? конкурентоспро-можн? позиц?? власного стартап-проектуВиб?р асоц?ац?й, як? мають сформувати комплексну позиц?ю власного проекту (три ключових)Алгоритм додавання запитань до тесту ма? бути точним.Система ? невибагливою до ресурс?вСистема ? щвидкоюПроведен-ня крупних оновлень (оптим?-зац?я розрахун-к?в), створення додатков-ого функц?она-лу.Товар ? ?новац?йним (в тренд?) та дешевим у використанн? пор?вняно з альтернативами Швидкий, невибагливий до ресурс?в та зручний доступ до використання простих та складних алгоритм?в розм?щення запитань до тест?в, програма працю? в режим? онлайн.Розроблення маркетингово? програми стартап-проектуСформу?мо маркетингову концепц?ю товару, який отрима? споживач. В таблиц? 4.18 зображено результати попереднього анал?зу конкурентоспроможност? товару. Таблиця 4.18 – Ключов? переваги концепц?? потенц?йного товару№ п/пПотребаВигода, яку пропону? товарКлючов? переваги перед конкурентами (?снуюч? або так?, що потр?бно створити)1.Алгоритм ?ндив?дуального п?дбору запитань в тест? для кожного тестованого. Об’?ктивне оц?нювання знань з використанням ?ндив?дуального п?дбору запитань.Доступн?сть для використання в навчальних закладах.2.Невибаглив?сть до апаратних ресурс?вНевибаглив?сть до апаратних ресурс?в кл??нтаДоступн?сть для використання в навчальних закладах.3.Швидкод?яШвидкод?я системиБ?льша швидк?стьНадал? розробимо трир?вневу маркетингову модель товару: уточнимо ?дею продукту, його ф?зичн? складов?, особливост? процесу його надання. Дана модель зображена в таблиц? 4.19.Таблиця 4.19 – Опис трьох р?вн?в модел? товаруР?вн? товаруСутн?сть та складов??. Товар за задумомПрограмний продукт – система тестування, яка дозволя? користувачу використовувати алгоритм ?ндив?дуального п?дбору запитань до вар?ант?в тесту.??. Товар у реальному виконанн?Властивост? / характеристики:1. Можлив?сть використання алгоритму для ?ндив?дуального п?дбору запитань до тесту2. Можлив?сть використання стандартних алгоритм?в вибору запитань до тестуЯк?сть: програмний продукт пройшов вс? етап? тестування та готовий до використання.Марка: назва орган?зац??-розробника ?Bloshchanevych Co?, назва товару ?MyTest?.???. Товар ?з п?дкр?пленнямСпец?ал?ст ?з впровадження встановлю? ПЗ.В?дд?л розробки п?дтриму? житт?д?яльн?сть ПЗ.Захист програмного продукту буде орган?зовано за допомогою ноу-хау.Тепер визначимо ц?нов? меж?, якими необх?дно керуватись при встановленн? ц?ни на потенц?йний товар, яке передбача? анал?з ц?ни на товари-аналоги або товари субститути, а також анал?з р?вня доход?в ц?льово? групи споживач?в. Анал?з проводився експертним методом ? його результати зображено в таблиц? 4.20.Таблиця 4.20 – Визначення меж встановлення ц?нР?вень ц?н на товари-зам?нникиР?вень ц?н на товари-аналогиР?вень доход?в ц?льово? групи споживач?вВерхня та нижня меж? встановлення ц?ни на товар/послугу2000-5000 $/р?к4000-6000 $/р?к7000-9000 $/р?кНижня межа – 2000 $/р?к, верхня межа - 5000 $/р?кНадал? визначимо оптимальну систему збуту, в межах якого прийма?ться р?шення. Дану систему зображено в таблиц? 4.21. Таблиця 4.21 – Формування системи збутуСпециф?ка закуп?вельно? повед?нки ц?льових кл??нт?вФункц?? збуту, як? ма? виконувати постачальник товаруГлибина каналу збутуОптимальна система збутуКл??нт виплачу? грош? на р?к, тод? до нього приходить спец?ал?ст ?з впровадження ?нформац?йних систем ? встановлю? ПЗ на комп’ютер кл??нта.Встановити програмний продукт на комп’ютери кл??нт?в.Один посередник – спец?ал?ст по впровадженню ?нформац?йних систем.Канал збуту одного р?вня.Тепер розробимо концепц?ю маркетингових комун?кац?й, що спира?ться на попередньо обрану основу для позиц?онування, визначену специф?ку повед?нки кл??нт?в. Дану концепц?ю зображено в таблиц? 4.22. Таблиця 4.22 – Концепц?я маркетингових комун?кац?йСпециф?ка повед?нки ц?льових кл??нт?вКанали комун?кац?й, якими користуються ц?льов? кл??нтиКлючов? позиц??, обран? для позиц?онува-нняЗавдання рекламного пов?домленняКонцепц?я рекламного зверненняКл??нт намага?ться знайти нов? алгоритми розпод?лу запитань в тестових завданнях.Мережа ?нтернет, соц?альн? мереж?, мессенжери.Швидкод?я, невибаглив?сть до апаратних ресурс?в, ?новац?йн?сть ПЗ, в?дносно невелика варт?сть ПЗ.Продемонструва-ти швидкод?ю, дешевизну експлуатац??, ?новац?йн?сть та в?дносну невелику варт?сть ПЗ.Показати можлив?сть за невелику ц?ну зац?кавити користувач?в свого ПЗ.Висновки до розд?луВ даному розд?л? було повн?стю виконано перший етап розроблення стартап-проекту, а саме, виконано маркетинговий анал?з стартап-проекту. За допомогою нього можна сказати, що ?сну? можлив?сть ринково? комерц?ал?зац?? проекту, адже на ринку наявний попит на системи автоматизованого тестування знань та алгоритми для створення тест?в, до того ж рентабельн?сть роботи ? досить високою.З огляду на потенц?йну групу кл??нт?в, а саме, навчальн? заклади базового р?вня та ?новац?йн?сть технолог?? ? велик? перспективи впровадження даного програмного забезпечення. Для ринково? реал?зац?? проекту доц?льно обрати таку альтернативу впровадження: створення MVP та впровадження його в невелику к?льк?сть навчальних заклад?в базового р?вня.ВИСНОВКИВ дан?й робот? було досл?джено роль тестування в навчальному процес? та актуальн?сть автоматизац?? процесу тестування. Досл?джено методи створення ?ндив?дуальних тестових вар?ант?в в уже ?снуючих системах, ?х структурн? особливост? та особливост? ?х реал?зац??. Досл?джено методи створення ?ндив?дуальних тестових вар?ант?в описан? у в?дпов?дних джерелах але не реал?зован? в системах, що знаходяться у в?льному доступ?. На основ? проведених досл?джень сформовано та поставлено задач?, що необх?дно вир?шити в рамках створення ПП. Розроблено новий метод створення ?ндив?дуальних тестових вар?ант?в з використанням переваг вже перев?рених в ?снуючих системах тестування метод?в, технолог?й ?нтелектуального анал?зу даних та метод?в, що були описан? лише теоретично. Спроектовано модель даних та обрано технолог?ю реал?зац?? ц??? модел? найб?льш зручну для розв’язання поставлених завдань. Було розроблено ПП на основ? поставлених завдань та обраних технолог?й ?х вир?шення. Виявлено напрямки можливих подальших досл?джень та вдосконалень ПП:створення можливост? динам?чного обрання к?лькост? р?вн?в складност? запитань в заданих межах за вимогою користувача;динам?чне обрання к?лькост? запитань в межах вар?анту тесту з урахуванням заданих обмежень та результату тестованого, що дозволить проводити не лише тестування з метою перев?рки р?вня знань, а й навчальне тестування;ускладнення технолог?? оц?нки р?вня складност? запитань (наприклад з додаванням коеф?ц??нт?в, що враховують тип запитання);розширення тип?в запитань, з якими може працювати алгоритм (наприклад введення в?дкритих запитань);додавання можливост? автоматичного формування зв?т?в за шаблонами;?нтеграц?я даного ПП з розробленою в рамках бакалаврсько? роботи системою тестування.Завдяки обраним технолог?ям реал?зац?? впровадження даних вдосконалень не потребу? повно? переробки ПП, а дозволя? лише виконати необх?дн? розширення вже ?снуючого функц?оналу. БД обрана для збереження тестових завдань також не потребу? структурних зм?н.ПЕРЕЛ?К ПОСИЛАНЬ Заозерская Л.А., Колоколов А.А., Планкова В.А. Об одной автоматизированной системе тестирования знаний студентов по экономико-математическим методам. Moscow Education Online 2010: тезисы докл. IV междунар. конф. – М. : Global Conferences, 2010. C. 130-133.О разработке специализированных компьютерных сетей контроля знаний. URL: Заозерская Л.А., Колоколов А.А., Планкова В.А. Разработка автоматизированной системы контроля знаний с использованием моделей дискретной оптимизации. Moscow Education Online 2009: тезисы докл. III междунар. конф. – М.: Global Conferences, 2009. C. 255-258.Современные системы конторля знаний студентов. URL: Ковтун С. А., Капитан С. Н., Савельев О. О. О концеции создания интелектуальных тестирующих систем. Искуственный интелект. 2009. № 4. С. 360-364.Описание параметров алгоритма отбора тестовых вопросов в программах тестирования по спецификации QTI. URL: Использование клиент-серверной архитектуры и WEB-технологий в системах тестирования. URL: Лазарева Е. Г., Устинова Е. Г., Пахомова Е. Г. Сравнительный анализ обучающих возможностей тестов ?Айрен? и тестов на платформе Moodle в изучении дисциплин математического профиля. Вестник ТГПУ. 2015. №12. С. 81-85.Программа тестирования знаний – Айрен. URL: VeralSoft для бизнеса и образования. Программы для создания тестов и проведения тестирования. URL: INDIGO – Программа для создания тестов и онлайн тестирования. URL: Система тестирования ?indigo?. URL: MyTestXPro Wiki Help. URL: Нардюжев В. И., Нардюжев И. В. Модели и алгоритмы информационно-вычислительной системы компьютерного тестирования. Москва: Прометей, 2000. 148 с. Соловов А. В. Проектирование компьютерных систем учебного назначения: Учебное пособие. Самара: СГАУ, 1995. 140 с. Фарфоров А. С., Дударов С. П. Алгоритмы адаптивного тестирования знаний на основе теории нечетких множеств. Успехи в химии и химической технологии. 2008. №1. С. 63-67. Заозерская Л.А., Планкова В.А. Применение моделей дискретной оптимизации при разработке автоматизированной тестирующей системы. Вестник НГУ. Серия: Информационные технологии. 2008. Т. 6 (Вып. 1). С. 47-52. Заозерская Л.А., Планкова В.А. Создание автоматизированной системы компьютерного тестирования с использованием дискретной оптимизации. Новые информационные технологии в университетском образовании: тезисы научно-метод. конф. – Новосибирск: ИЭПМ СО РАО, 2007. С. 82-83. Колоколов А. А., Ларина Л. В. Разработка компьютерной системы контроля знаний с использованием методов дискретной оптимизации. Вестник СибГУТИ. 2017. №1. С. 33-38. Заозерская Л.А., Колоколов А.А., Планкова В.А. Разработка алгоритмов перебора L-классов для одной задачи компьютерного тестирования. Омский научный вестник. 2008. № 1 (64). С. 10-12. Алгоритмы декомпозиции и перебора L-классов для решения некоторых задач размещения. URL: О разработке специализирован?х систем контроля знаний. URL: Анализ результатов тестирования. URL: Шеин А. А. Методика статистической оценки качества знаний студентов при контрольном опросе с помощью тестов. Современные проблемы науки и образования. 2010. Вип. 4. URL: . Методы анализа результатов тестирования. URL: . Ефремова Н. Ф. Тестовый контроль в образовании М:Логос, 2007. 2280с. Лекция: теоретико-графовые модели данных. URL: Иерархическая база данных. Иерархичесткая модель данных. URL: Метод Монте-Карло для поиска в дереве. URL: Метод Монте-Карло и его точность. URL: A Deep Dive into Monte Carlo Tree Search. URL: Кластеризация: алгоритмы k-means и c-means. URL: Обзор алгоритмов кластеризации данных. URL: Метод k-средних (K-means). Loginom Wiki. URL: Алгоритм k средних (k-means). URL: (k-means) k-means++: The Advantages of Careful Seeding. URL: What is a Graph Database and Property Graph | Neo4j. URL: Graph Databases for Beginners: Why Graph Technology Is the Future. URL: Графовые базы данных: область применения и преимущества. URL: Neo4j 3.0 несет в массы графовые базы данных. URL: 3 самых важных сферы применения Python: возможности языка. URL: v4: The Next Generation – Neo4j Developer blog – Medium. URL: Онлайн-тест на знание времен английского языка. URL: ДОДАТОК Аimport numpy as npfrom collections import defaultdictfrom abc import ABC, abstractmethodclass MonteCarloTreeSearchNode(ABC): def __init__(self, state, parent=None): """ Parameters ---------- state : mctspy.mon.TwoPlayersAbstractGameState parent : MonteCarloTreeSearchNode """ self.state = state self.parent = parent self.children = [] @property @abstractmethod def untried_actions(self): """ Returns ------- list of mctspy.mon.AbstractGameAction """ pass @property @abstractmethod def q(self): pass @property @abstractmethod def n(self): pass @abstractmethod def expand(self): pass @abstractmethod def is_terminal_node(self): pass @abstractmethod def rollout(self): pass @abstractmethod def backpropagate(self, reward): pass def is_fully_expanded(self): return len(self.untried_actions) == 0 def best_child(self, c_param=1.4): choices_weights = [ (c.q / c.n) + c_param * np.sqrt((2 * np.log(self.n) / c.n)) for c in self.children ] return self.children[np.argmax(choices_weights)] def rollout_policy(self, possible_moves): return possible_moves[np.random.randint(len(possible_moves))]class TwoPlayersGameMonteCarloTreeSearchNode(MonteCarloTreeSearchNode): def __init__(self, state, parent=None): super().__init__(state, parent) self._number_of_visits = 0. self._results = defaultdict(int) self._untried_actions = None @property def untried_actions(self): if self._untried_actions is None: self._untried_actions = self.state.get_legal_actions() return self._untried_actions @property def q(self): wins = self._results[self.parent.state.next_to_move] loses = self._results[-1 * self.parent.state.next_to_move] return wins - loses @property def n(self): return self._number_of_visits def expand(self): action = self.untried_actions.pop() next_state = self.state.move(action) child_node = TwoPlayersGameMonteCarloTreeSearchNode( next_state, parent=self ) self.children.append(child_node) return child_node def is_terminal_node(self): return self.state.is_game_over() def rollout(self): current_rollout_state = self.state while not current_rollout_state.is_game_over(): possible_moves = current_rollout_state.get_legal_actions() action = self.rollout_policy(possible_moves) current_rollout_state = current_rollout_state.move(action) return current_rollout_state.game_result def backpropagate(self, result): self._number_of_visits += 1. self._results[result] += 1. if self.parent: self.parent.backpropagate(result)class MonteCarloTreeSearch(object): def __init__(self, node): """ MonteCarloTreeSearchNode Parameters ---------- node : mctspy.tree.nodes.MonteCarloTreeSearchNode """ self.root = node def best_action(self, simulations_number): """ Parameters ---------- simulations_number : int number of simulations performed to get the best action Returns ------- """ for _ in range(0, simulations_number): v = self._tree_policy() reward = v.rollout() v.backpropagate(reward) # to select best child go for exploitation only return self.root.best_child(c_param=0.) def _tree_policy(self): """ selects node to run rollout/playout for Returns ------- """ current_node = self.root while not current_node.is_terminal_node(): if not current_node.is_fully_expanded(): return current_node.expand() else: current_node = current_node.best_child() return current_nodeimport randomimport mathimport hashlibimport argparseSCALAR=1/math.sqrt(2.0)class State():NUM_TURNS = 10GOAL = 0MOVES=[2,-2,3,-3]MAX_VALUE= (5.0*(NUM_TURNS-1)*NUM_TURNS)/2num_moves=len(MOVES)def __init__(self, value=0, moves=[], turn=NUM_TURNS):self.value=valueself.turn=turnself.moves=movesdef next_state(self):nextmove=random.choice([x*self.turn for x in self.MOVES])next=State(self.value+nextmove, self.moves+[nextmove],self.turn-1)return nextdef terminal(self):if self.turn == 0:return Truereturn Falsedef reward(self):r = 1.0-(abs(self.value-self.GOAL)/self.MAX_VALUE)return rdef __hash__(self):return int(hashlib.md5(str(self.moves).encode('utf-8')).hexdigest(),16)def __eq__(self,other):if hash(self)==hash(other):return Truereturn Falsedef __repr__(self):s="Value: %d; Moves: %s"%(self.value,self.moves)return sclass Node():def __init__(self, state, parent=None):self.visits=1self.reward=0.0self.state=stateself.children=[]self.parent=parentdef add_child(self,child_state):child=Node(child_state,self)self.children.append(child)def update(self,reward):self.reward+=rewardself.visits+=1def fully_expanded(self):if len(self.children)==self.state.num_moves:return Truereturn Falsedef __repr__(self):s="Node; children: %d; visits: %d; reward: %f"%(len(self.children),self.visits,self.reward)return sdef UCTSEARCH(budget,root):for iter in range(int(budget)):if iter%10000==9999:("simulation: %d"%iter)(root)front=TREEPOLICY(root)reward=DEFAULTPOLICY(front.state)BACKUP(front,reward)return BESTCHILD(root,0)def TREEPOLICY(node):#a hack to force 'exploitation' in a game where there are many options, and you may never/not want to fully expand firstwhile node.state.terminal()==False:if len(node.children)==0:return EXPAND(node)elif random.uniform(0,1)<.5:node=BESTCHILD(node,SCALAR)else:if node.fully_expanded()==False:return EXPAND(node)else:node=BESTCHILD(node,SCALAR)return nodedef EXPAND(node):tried_children=[c.state for c in node.children]new_state=node.state.next_state()while new_state in tried_children:new_state=node.state.next_state()node.add_child(new_state)return node.children[-1]#current this uses the most vanilla MCTS formula it is worth experimenting with THRESHOLD ASCENT (TAGS)def BESTCHILD(node,scalar):bestscore=0.0bestchildren=[]for c in node.children:exploit=c.reward/c.visitsexplore=math.sqrt(2.0*math.log(node.visits)/float(c.visits))score=exploit+scalar*exploreif score==bestscore:bestchildren.append(c)if score>bestscore:bestchildren=[c]bestscore=scoreif len(bestchildren)==0:logger.warn("OOPS: no best child found, probably fatal")return random.choice(bestchildren)def DEFAULTPOLICY(state):while state.terminal()==False:state=state.next_state()return state.reward()def BACKUP(node,reward):while node!=None:node.visits+=1node.reward+=rewardnode=node.parentreturnif __name__=="__main__":parser = argparse.ArgumentParser(description='MCTS research code')parser.add_argument('--num_sims', action="store", required=True, type=int)parser.add_argument('--levels', action="store", required=True, type=int, choices=range(State.NUM_TURNS))args=parser.parse_args()current_node=Node(State())for l in range(args.levels):current_node=UCTSEARCH(args.num_sims/(l+1),current_node)print("level %d"%l)print("Num Children: %d"%len(current_node.children))for i,c in enumerate(current_node.children):print(i,c)print("Best Child: %s"%current_node.state)import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dfrom sklearn.cluster import KMeansfrom sklearn.datasets import make_blobskmeans = KMeans(n_clusters=3, init='k-means++', n_init=20, max_iter=300, tol=0.00001, precompute_distances='auto', verbose=0, random_state=None, copy_x=True, n_jobs=None, algorithm='auto')kmeans = kmeans.fit(X)abels = kmeans.predict(X)C = kmeans.cluster_centers_fig = plt.figure()import clickfrom py2neo.meta import NEO4J_URI, NEO4J_AUTH@click.group(help="""\Multipurpose Neo4j toolkit.""")def py2neo(): pass@mand("version", help="""\Display the current library version""")def py2neo_version(): from py2neo.meta import __version__ click.echo(__version__)@mand("console", help="""\Interactive Cypher console""")@click.option("-u", "--uri", default=NEO4J_URI, help="Set the connection URI.")@click.option("-a", "--auth", default=NEO4J_AUTH, help="Set the user and password.")@click.option("-s", "--secure", is_flag=True, default=False, help="Use encrypted communication (TLS).")@click.option("-v", "--verbose", is_flag=True, default=False, help="Show low level communication detail.")def py2neo_console(uri, auth=None, secure=None, verbose=None): from py2neo.console import Console, ConsoleError try: con = Console(uri, auth=auth, secure=secure, verbose=verbose) except ConsoleError as error: click.echo(error) raise SystemExit(1) else: raise SystemExit(con.loop())def py2neo_auth(): passdef py2neo_auth_list(auth_file): from py2neo.admin.install import AuthFile for user in AuthFile(auth_file): click.echo(user.name)@click.argument("auth_file")@click.argument("user_name")def py2neo_auth_remove(auth_file, user_name): from py2neo.admin.install import AuthFile AuthFile(auth_file).remove(user_name)@click.argument("auth_file")@click.argument("user_name")@click.password_option()def py2neo_auth_update(auth_file, user_name, password): from py2neo.admin.install import AuthFile AuthFile(auth_file).update(user_name, password)def py2neo_get(): from py2neo.admin.dist import Distribution Distribution().download()@click.option("-u", "--uri", default=NEO4J_URI, help="Set the connection URI.")@click.option("-a", "--auth", default=NEO4J_AUTH, help="Set the user and password.")@click.option("-s", "--secure", is_flag=True, default=False, help="Use encrypted communication (TLS).")@click.option("-v", "--verbose", is_flag=True, default=False, help="Show low level communication detail.")@click.argument("cypher", nargs=-1)def py2neo_run(cypher, uri, auth=None, secure=None, verbose=None): from py2neo.console import Console, ConsoleError try: con = Console(uri, auth=auth, secure=secure, verbose=verbose) except ConsoleError as error: click.echo(error) raise SystemExit(1) else: raise SystemExit(con.run_all(cypher))def main(): try: py2neo(obj={}) except Exception as error: click.secho(error.args[0], err=True) exit(1) else: exit(0)if __name__ == "__main__": main()import refrom py2neo.cypher import cypher_escape, cypher_reprfrom py2neo.data import Nodefrom py2neo.internal.collections import is_collectionfrom py2neo.pat import Sequence, Set_operators = { "exact": "=", "not": "<>", "regex": "=~", "gt": ">", "gte": ">=", "lt": "<", "lte": "<=", "startswith": "STARTS WITH", "endswith": "ENDS WITH", "contains": "CONTAINS",}_operators_search = "^(.+)__(%s)$" % "|".join(_operators.keys())def _property_conditions(properties, offset=1): for i, (key, value) in enumerate(properties.items(), start=offset): if key == "__id__": condition = "id(_)" else: condition = "_.%s" % cypher_escape(key) if value is None: condition += " IS NULL" parameters = {} elif isinstance(value, (tuple, set, frozenset)): condition += " IN {%d}" % i parameters = {"%d" % i: list(value)} elif re.match(_operators_search, key): parts = re.search(_operators_search, key) prop = parts.group(1) operator = parts.group(2) condition = "_.%s %s {%d}" % (prop, _operators[operator], i) parameters = {"%d" % i: value} else: condition += " = {%d}" % i parameters = {"%d" % i: value} yield condition, parametersclass NodeMatch(object): """ Immutable set of node selection criteria. """ def __init__(self, graph, labels=frozenset(), conditions=tuple(), order_by=tuple(), skip=None, limit=None): self.graph = graph self._labels = frozenset(labels) self._conditions = tuple(conditions) self._order_by = tuple(order_by) self._skip = skip self._limit = limit def __len__(self): """ Return the number of nodes matched. """ return self.graph.evaluate(*self._query_and_parameters(count=True)) def __iter__(self): """ Iterate through all matching nodes. """ for record in self.graph.run(*self._query_and_parameters()): yield record[0] def first(self): """ Evaluate the match and return the first :class:`.Node` matched or :const:`None` if no matching nodes are found. :return: a single matching :class:`.Node` or :const:`None` """ return self.graph.evaluate(*self._query_and_parameters()) def _query_and_parameters(self, count=False): """ A tuple of the Cypher query and parameters used to select the nodes that match the criteria for this selection. :return: Cypher query string """ clauses = ["MATCH (_%s)" % "".join(":%s" % cypher_escape(label) for label in self._labels)] parameters = {} if self._conditions: conditions = [] for condition in self._conditions: if isinstance(condition, tuple): condition, param = condition parameters.update(param) conditions.append(condition) clauses.append("WHERE %s" % " AND ".join(conditions)) if count: clauses.append("RETURN count(_)") else: clauses.append("RETURN _") if self._order_by: clauses.append("ORDER BY %s" % (", ".join(self._order_by))) if self._skip: clauses.append("SKIP %d" % self._skip) if self._limit is not None: clauses.append("LIMIT %d" % self._limit) return " ".join(clauses), parameters def where(self, *conditions, **properties): """ Refine this match to create a new match. The criteria specified for refining the match consist of conditions and properties. Conditions are individual Cypher expressions that would be found in a `WHERE` clause; properties are used as exact matches for property values. To refer to the current node within a condition expression, use the underscore character ``_``. For example:: match.where("_.name =~ 'J.*'") Simple property equalities can also be specified:: match.where(born=1976) :param conditions: Cypher expressions to add to the `WHERE` clause :param properties: exact property match keys and values :return: refined :class:`.NodeMatch` object """ return self.__class__(self.graph, self._labels, self._conditions + conditions + tuple(_property_conditions(properties)), self._order_by, self._skip, self._limit) def order_by(self, *fields): """ Order by the fields or field expressions specified. To refer to the current node within a field or field expression, use the underscore character ``_``. For example:: match.order_by("_.name", "max(_.a, _.b)") :param fields: fields or field expressions to order by :return: refined :class:`.NodeMatch` object """ return self.__class__(self.graph, self._labels, self._conditions, fields, self._skip, self._limit) def skip(self, amount): """ Skip the first `amount` nodes in the result. :param amount: number of nodes to skip :return: refined :class:`.NodeMatch` object """ return self.__class__(self.graph, self._labels, self._conditions, self._order_by, amount, self._limit) def limit(self, amount): """ Limit to at most `amount` nodes. :param amount: maximum number of nodes to return :return: refined :class:`.NodeMatch` object """ return self.__class__(self.graph, self._labels, self._conditions, self._order_by, self._skip, amount)class NodeMatcher(object): """ Base matcher for selecting nodes that fulfil a specific set of criteria. :param graph: :class:`.Graph` object on which to perform matches """ _match_class = NodeMatch def __init__(self, graph): self.graph = graph def __len__(self): """ Return the number of nodes matched. """ return len(self.match()) def __getitem__(self, identity): """ Return a node by identity. """ entity = self.get(identity) if entity is None: raise KeyError("Node %d not found" % identity) return entity def get(self, identity): """ Create a new :class:`.NodeMatch` that filters by identity and returns the first matched :class:`.Node`. This can essentially be used to match and return a :class:`.Node` by ID. matcher.get(1234) If no such :class:`.Node` is found, py:const:`None` is returned instead. Contrast with `matcher[1234]` which raises a `KeyError` if no entity is found. """ t = type(identity) if issubclass(t, (list, tuple, set, frozenset)): missing = [i for i in identity if i not in self.graph.node_cache] if missing: list(self.match().where("id(_) in %s" % cypher_repr(missing))) return t(self.graph.node_cache.get(i) for i in identity) else: try: return self.graph.node_cache[identity] except KeyError: return self.match().where("id(_) = %d" % identity).first() def match(self, *labels, **properties): """ Describe a basic node match using labels and property equality. :param labels: node labels to match :param properties: set of property keys and values to match :return: :class:`.NodeMatch` instance """ criteria = {} if labels: criteria["labels"] = frozenset(labels) if properties: criteria["conditions"] = tuple(_property_conditions(properties)) return self._match_class(self.graph, **criteria)class RelationshipMatch(object): """ Immutable set of relationship selection criteria. """ def __init__(self, graph, nodes=None, r_type=None, conditions=tuple(), order_by=tuple(), skip=None, limit=None): if nodes is not None and not isinstance(nodes, (Sequence, Set)): raise ValueError("Nodes must be supplied as a Sequence or a Set") self.graph = graph self._nodes = nodes self._r_type = r_type self._conditions = tuple(conditions) self._order_by = tuple(order_by) self._skip = skip self._limit = limit def __len__(self): """ Return the number of relationships matched. """ return self.graph.evaluate(*self._query_and_parameters(count=True)) def __iter__(self): """ Iterate through all matching relationships. """ query, parameters = self._query_and_parameters() for record in self.graph.run(query, parameters): yield record[0] def first(self): """ Evaluate the selection and return the first :class:`.Relationship` selected or :const:`None` if no matching relationships are found. :return: a single matching :class:`.Relationship` or :const:`None` """ return self.graph.evaluate(*self._query_and_parameters()) def _query_and_parameters(self, count=False): """ A tuple of the Cypher query and parameters used to select the relationships that match the criteria for this selection. :return: Cypher query string """ def verify_node(n): if n.graph != self.graph: raise ValueError("Node %r does not belong to this graph" % n) if n.identity is None: raise ValueError("Node %r is not bound to a graph" % n) def r_type_name(r): try: return r.__name__ except AttributeError: return r clauses = [] parameters = {} if self._r_type is None: relationship_detail = "" elif is_collection(self._r_type): relationship_detail = ":" + "|:".join(cypher_escape(r_type_name(t)) for t in self._r_type) else: relationship_detail = ":%s" % cypher_escape(r_type_name(self._r_type)) if not self._nodes: clauses.append("MATCH (a)-[_" + relationship_detail + "]->(b)") elif isinstance(self._nodes, Sequence): if len(self._nodes) >= 1 and self._nodes[0] is not None: start_node = Node.cast(self._nodes[0]) verify_node(start_node) clauses.append("MATCH (a) WHERE id(a) = {x}") parameters["x"] = start_node.identity if len(self._nodes) >= 2 and self._nodes[1] is not None: end_node = Node.cast(self._nodes[1]) verify_node(end_node) clauses.append("MATCH (b) WHERE id(b) = {y}") parameters["y"] = end_node.identity if len(self._nodes) >= 3: raise ValueError("Node sequence cannot be longer than two") clauses.append("MATCH (a)-[_" + relationship_detail + "]->(b)") elif isinstance(self._nodes, Set): nodes = {node for node in self._nodes if node is not None} if len(nodes) >= 1: start_node = Node.cast(nodes.pop()) verify_node(start_node) clauses.append("MATCH (a) WHERE id(a) = {x}") parameters["x"] = start_node.identity if len(nodes) >= 1: end_node = Node.cast(nodes.pop()) verify_node(end_node) clauses.append("MATCH (b) WHERE id(b) = {y}") parameters["y"] = end_node.identity if len(nodes) >= 1: raise ValueError("Node set cannot be larger than two") clauses.append("MATCH (a)-[_" + relationship_detail + "]-(b)") else: raise ValueError("Nodes must be passed as a Sequence or a Set") if self._conditions: conditions = [] for condition in self._conditions: if isinstance(condition, tuple): condition, param = condition parameters.update(param) conditions.append(condition) clauses.append("WHERE %s" % " AND ".join(conditions)) if count: clauses.append("RETURN count(_)") else: clauses.append("RETURN _") if self._order_by: clauses.append("ORDER BY %s" % (", ".join(self._order_by))) if self._skip: clauses.append("SKIP %d" % self._skip) if self._limit is not None: clauses.append("LIMIT %d" % self._limit) return " ".join(clauses), parameters def where(self, *conditions, **properties): return self.__class__(self.graph, nodes=self._nodes, r_type=self._r_type, conditions=self._conditions + conditions + tuple(_property_conditions(properties)), order_by=self._order_by, skip=self._skip, limit=self._limit) def order_by(self, *fields): return self.__class__(self.graph, nodes=self._nodes, r_type=self._r_type, conditions=self._conditions, order_by=fields, skip=self._skip, limit=self._limit) def skip(self, amount): """ Skip the first `amount` relationships in the result. :param amount: number of relationships to skip :return: refined :class:`.RelationshipMatch` object """ return self.__class__(self.graph, nodes=self._nodes, r_type=self._r_type, conditions=self._conditions, order_by=self._order_by, skip=amount, limit=self._limit) def limit(self, amount): """ Limit to at most `amount` relationships. :param amount: maximum number of relationships to return :return: refined :class:`.RelationshipMatch` object """ return self.__class__(self.graph, nodes=self._nodes, r_type=self._r_type, conditions=self._conditions, order_by=self._order_by, skip=self._skip, limit=amount)class RelationshipMatcher(object): """ Base matcher for selecting relationships that fulfil a specific set of criteria. :param graph: :class:`.Graph` object on which to perform matches """ _match_class = RelationshipMatch def __init__(self, graph): self.graph = graph self._all = self._match_class(self.graph) def __len__(self): """ Return the number of relationships matched. """ return len(self.match()) def __getitem__(self, identity): """ Return a relationship by identity. """ entity = self.get(identity) if entity is None: raise KeyError("Relationship %d not found" % identity) return entity def get(self, identity): """ Create a new :class:`.RelationshipMatch` that filters by identity and returns the first matched :class:`.Relationship`. This can essentially be used to match and return a :class:`.Relationship` by ID. matcher.get(1234) If no such :class:`.Relationship` is found, py:const:`None` is returned instead. Contrast with `matcher[1234]` which raises a `KeyError` if no entity is found. """ t = type(identity) if issubclass(t, (list, tuple, set, frozenset)): missing = [i for i in identity if i not in self.graph.relationship_cache] if missing: list(self.match().where("id(_) in %s" % cypher_repr(missing))) return t(self.graph.relationship_cache.get(i) for i in identity) else: try: return self.graph.relationship_cache[identity] except KeyError: return self.match().where("id(_) = %d" % identity).first() def match(self, nodes=None, r_type=None, **properties): """ Describe a basic relationship match... :param nodes: Sequence or Set of start and end nodes (:const:`None` means any node); a Set implies a match in any direction :param r_type: :param properties: set of property keys and values to match :return: :class:`.RelationshipMatch` instance """ criteria = {} if nodes is not None: criteria["nodes"] = nodes if r_type is not None: criteria["r_type"] = r_type if properties: criteria["conditions"] = tuple(_property_conditions(properties)) return self._match_class(self.graph, **criteria) ................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download