-
Notifications
You must be signed in to change notification settings - Fork 140
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #134 from FormalLanguageConstrainedPathQuerying/ta…
…sk_query_lang Задача 11. Про парсер. Описание языка. Задача 12. Про интерпретатор. Причёсана задача 10 про постановку экспериментов.
- Loading branch information
Showing
7 changed files
with
257 additions
and
391 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,16 +1,40 @@ | ||
# Задача 11. Тензорный алгоритм решения задачи достижимости с КС ограничениями | ||
# Задача 10. Экспериментальное исследование алгоритмов решения задачи достижимости с КС ограничениями | ||
|
||
* **Мягкий дедлайн**: 27.11.2022, 23:59 | ||
* **Жёсткий дедлайн**: 30.11.2022, 23:59 | ||
* Полный балл: 5 | ||
* **Жёсткий дедлайн**: 08.05.2024, 23:59 | ||
* Полный балл: 19 | ||
|
||
## Задача | ||
|
||
- [ ] Реализовать **функцию**, основанную на тензорном алгоритме, решающую задачу достижимости между всеми парами вершин для заданного графа и заданной КС грамматики. | ||
- Результат работы функции --- множество троек вида (вершина, нетерминал, вершина). | ||
- Предусмотрите возможность получать граф из различных источников в различных форматах. | ||
- Предусмотрите возможность получать грамматику из различных источников (из файла, как результат работы других функций). | ||
- Для преобразования грамматики в РКА использовать результаты предыдущих работ. | ||
- Для реализации матричных операций использовать [sciPy](https://docs.scipy.org/doc/scipy/reference/sparse.html). | ||
- [ ] На основе предыдущей функции реализовать функцию, позволяющую решать задачу достижимости для заданного набора стартовых и финальных вершин, и заданного нетерминала. | ||
- [ ] Добавить необходимые тесты. | ||
Задача посвящена анализу производительности различных алгоритмов решения задачи достижимости между всеми парами вершин с контекстно-свободными ограничениями: алгоритма Хеллингса, матричного алгоритма, тензорного алгоритма, алгоритма на основе GLL. В ходе анализа необходимо ответить на следующие вопросы. | ||
- Какой из трёх указанных алгоритмов обладает лучшей производительностью? | ||
- Имеет ли смысл для решения задачи достижимости с регулярными ограничениями использовать алгоритмы для КС ограничений (ведь регулярные --- частный случай КС) или всё же лучше использовать специализированные алгоритмы для регулярных ограничений? | ||
- Как влияет грамматика на производительность тензорного алгоритма и алгоритма на основе GLL? Если зафиксировать язык, то как свойства грамматики (размер, (не)однозначность) влияют на производительность. | ||
|
||
Решение данной задачи оформляется как Python notebook. Для того, чтобы обеспечить возможность проверки, необходимо сделать notebook самодостаточным: в него должны быть включены все действия, необходимые для воспроизведения эксперимента. Также в notebook размещается отчет и анализ результатов ваших экспериментов в текстовом виде. Отчет сопровождается диаграммами, таблицами, картинками, если это необходимо для объяснения результатов. | ||
|
||
Решением является не просто код, но отчёт об экспериментальном исследовании, который должен являться связанным текстом и содержать (как минимум) следующие разделы: | ||
- Постановка задачи | ||
- Описание исследуемых решений | ||
- Описание набора данных для экспериментов | ||
- Графы | ||
- Запросы | ||
- Описание эксперимента | ||
- Оборудование | ||
- Что и как замерялось, как эти измерения должны помочь ответить на поставленные вопросы | ||
- Результаты экспериментов | ||
- Графики, таблицы | ||
- Анализ результатов экспериментов | ||
- Ответы на поставленные вопросы, аргументация ответов | ||
|
||
- [ ] Создать Python notebook, подключить необходимые зависимости. | ||
- [ ] Подключить необходимые решения из предыдущих работ. | ||
- [ ] Сформировать набор данных. | ||
- [ ] Выбрать некоторые графы из [набора](https://formallanguageconstrainedpathquerying.github.io/CFPQ_Data/graphs/index.html). Не забудьте обосновать, почему выбрали именно эти графы. Обратите внимание, что в наборе есть графы и грамматики для различных прикладных задач (анализ RDF, анализ указателей в С, анализ Java-программ). Рекомендуется выбирать графы, относящиеся к различным областям. | ||
- [ ] В качестве запросов предлагается использовать грамматики из раздела "Canonical grammars" в описании соответствующего графа ([пример](https://formallanguageconstrainedpathquerying.github.io/CFPQ_Data/graphs/data/taxonomy_hierarchy.html#canonical-grammars)). При необходимости (например, при ответе на третий вопрос), можно "оптимизировать" грамматику, вручную создав оптимальную RSM. Или же наоборот, преобразовать её в ОНФХ, или сделать её (не)однозначной. | ||
- [ ] Сформулировать этапы эксперимента. Что нужно сделать, чтобы ответить на поставленные вопросы? Почему? | ||
- [ ] Провести необходимые эксперименты, замеры | ||
- [ ] Оформить результаты экспериментов | ||
- [ ] Провести анализ результатов | ||
- [ ] Ответить на поставленные вопросы | ||
- [ ] Аргументировать ответы (пользуясь полученными результатами экспериментов) | ||
- [ ] Не забыть опубликовать notebook в репозитории |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.