|
1 | 1 | \chapter{Ключевые требования, определяющие архитектуру} |
2 | 2 |
|
| 3 | + |
| 4 | +\section{Ключевые функциональные требования} |
| 5 | +В данном разделе изложены функциональные требования к системе, определяющие её основную вычислительную модель, интерфейсы и возможности расширения. Эти требования отражают ожидаемое поведение ядра и набор поддерживаемых операций. |
| 6 | + |
| 7 | +\begin{itemizecmp} |
| 8 | + \item \textit{Поддержка основных распределений}: система должна предоставлять встроенную поддержку наиболее распространённых распределений (нормальное, экспоненциальное, биномиальное и др.), а также предусматривать механизм регистрации пользовательских распределений. |
| 9 | + \item \textit{Определение распределения}: каждое распределение должно быть определено посредством как минимум одной функциональной характеристики (например, функция плотности или функция распределения), поддерживать генерацию выборки и вычисление логарифма правдоподобия. Распределение должно быть связано с типом случайной величины (дискретной или непрерывной) и типом значений выборки(многомерной или одномерной). |
| 10 | + \item \textit{Функциональные и числовые характеристики}: система должна поддерживать вычисление дополнительных характеристик распределений (например, матожидание, дисперсия, энтропия), включая возможность их добавления пользователем. |
| 11 | + \item \textit{Преобразования распределений}: система должна поддерживать стандартные операции преобразования распределений, включая арифметические операции, функциональные отображения, свёртки, смеси и т.п. Должна быть предусмотрена возможность компоновки и каскадирования таких преобразований. |
| 12 | + \item \textit{Работа с семействами распределений}: система должна поддерживать задание семейств распределений, определяемых через параметрические пространства. Необходимо обеспечить возможность описания связей между семействами, включая асимптотику и граничные переходы (например, предельные случаи распределений при изменении параметров). Поддержка пользовательских семейств и добавления новых связей обязательна. |
| 13 | + \item \textit{Модель преобразований в форме графа}: система должна предоставлять представление преобразований над распределениями и семействами в виде ориентированного ациклического графа (DAG), где узлы соответствуют операциям или распределениям, а рёбра — потокам параметров. Такая модель должна поддерживать символьную арифметику и допускать упрощение графа на основе известных свойств (например, сумма двух нормальных распределений — снова нормальное распределение). Параметры модели могут включать как внутренние (структурные), так и внешние (например, время). |
| 14 | +\end{itemizecmp} |
| 15 | + |
| 16 | +\subsection{Требования к числовым и функциональным характеристикам} |
| 17 | + |
| 18 | +Под корректным вычислением числовой или функциональной характеристики заданного распределения подразумевается следующее: |
| 19 | +\begin{itemizecmp} |
| 20 | + \item В случае |
| 21 | + \item В случае |
| 22 | + \item В случае если значение характеристики неопределено или равно $\pm \infty$: система должна выдать соответствующее значение (объект типа NaN или отвечающий значению бесконечности со знаком соотвтетственно) и сгенерировать предупреждение о том что соответствующее значение не являяется числом. |
| 23 | +\end{itemizecmp} |
| 24 | + |
| 25 | +\textbf{Полнота:} |
| 26 | +\begin{itemizecmp} |
| 27 | + \item Для любого распределения должно быть доступно вычисление всех характеристик моментного/квантильного/информационного типа приведенных в глоссарии; |
| 28 | + \item Для любого распределения должно быть доступно вычисление всех функциональных характеристик (если они существуют для данного распределения) приведенных в глоссарии. |
| 29 | +\end{itemizecmp} |
| 30 | + |
| 31 | +\textbf{Гибкость и конфигурируемость:} |
| 32 | +\begin{itemizecmp} |
| 33 | + \item При наличии нескольких алгоритмов для расчета числовой/функциональной характеристики данного распределеения, должен быть определен алгоритм который используется по умолчанию; |
| 34 | + \item При наличии нескольких алгоритмов для расчета числовой/функциональной характеристики пользователь должен иметь возможность указать, какой алгоритм использовать. |
| 35 | +\end{itemizecmp} |
| 36 | + |
| 37 | +\textbf{Расширяемость:} |
| 38 | +\begin{itemizecmp} |
| 39 | + \item Пользователь должен иметь возможность добавлять свои собственные алгоритмы вычисления для уже существующих функциональных/числовых характеристик. |
| 40 | + \item Пользователь должен иметь возможность добавлять собственные числовые характеристики. В случае если числовая характеристика определена не для всех распределений, пользователь должен иметь возможность явно указать для какого класса распределений определена характеристика; |
| 41 | + \item Пользователь должен иметь возможность добавлять собственные функциональные характеристики. В случае если функциональные характеристика определена не для всех распределений, пользователь должен иметь возможность явно указать для какого класса распределений определена характеристика. |
| 42 | +\end{itemizecmp} |
| 43 | + |
| 44 | + |
| 45 | +\subsection{Требования к операциям над распределениями} |
| 46 | +\begin{itemizecmp} |
| 47 | + \item Для одномерных непрерывных распределений должны быть доступны операции описанные в параграфе «Преобразования распределений» обзора настоящей работы; |
| 48 | + \item При наличии нескольких способов вычисления операции, должен быть определён способ вычисления по умолчанию. |
| 49 | +\end{itemizecmp} |
| 50 | + |
| 51 | +\subsection{Требования к распределениям семействам распределений} |
| 52 | +\begin{itemizecmp} |
| 53 | + \item Для любого семейства распределений должна быть возможность создать новое семейство распределений, получаемое из исходного частичной подстановкой значений параметров; |
| 54 | + \item Для любого семейства распределений должна быть определена каноническая параметризация; |
| 55 | + \item Для любого семейства распределений должна быть возможность добавления новой параметризации. При добавлении новой параметризации, пользователь должен указать как параметры добавляемой параметризации выражаются через каноническую параметризацию и наоборот; |
| 56 | + \item Над семействами необходимо уметь производить операции образования смесей: непрерывных и дискретных; |
| 57 | + \item Должна быть возможность указать как представители семейства взаимодействуют с представителями других семейств при выполнении операций. |
| 58 | +\end{itemizecmp} |
| 59 | + |
| 60 | +\subsection{Требования к генерации выборок} |
| 61 | +\begin{itemizecmp} |
| 62 | + \item Для любого распределения, за исключением относящихся к распределениям геометрических примитивов, должна быть возможность генерации выборок; |
| 63 | + \item При создании пользовательского распределения должна предоставлять методы для генерации выборок без необходимости реализовывать алгоритмы генерации; |
| 64 | + \item При наличии нескольких алгоритмов генерации выборок, пользователь должен иметь возможность выбирать алгоритм; |
| 65 | + \item Если алгоритм генерации выборок имеет параметры, то пользователь должен уметь настраивать эти параметры. К числу параметров также относится используемый источник случайных или псевдослучайных чисел. |
| 66 | +\end{itemizecmp} |
| 67 | + |
| 68 | +\subsection{Технические ограничения и качественные требования} |
| 69 | + |
| 70 | +\subsection{Технические ограничения} |
| 71 | +В данном разделе перечислены внешние технические ограничения, влияющие на архитектуру и реализацию системы. Эти ограничения задаются проектом PySATL или внешними условиями и не подлежат изменению в рамках проектирования ядра. |
| 72 | + |
| 73 | +\begin{itemizecmp} |
| 74 | + \item \textit{Язык реализации}: система должна предоставлять основной пользовательский интерфейс на языке Python версии 3.x. Допускается использование других языков программирования (например, C/C++) во внутренней реализации с целью оптимизации вычислений, при условии полной прозрачности интерфейса для Python-пользователя. |
| 75 | + \item \textit{Лицензирование}: система должна распространяться под MIT-лицензией. Использование копилефт-лицензий (например, GPL) запрещено. |
| 76 | + \item \textit{Кроссплатформенность}: система должна работать на основных операционных системах (Linux, macOS, Windows) без необходимости установки платформозависимых компонентов или привязки к конкретной среде исполнения. |
| 77 | + \item \textit{Вычислительные ограничения}: система не должна требовать наличия GPU или специализированного оборудования. Все вычисления должны корректно выполняться на CPU без дополнительных зависимостей. |
| 78 | +\end{itemizecmp} |
| 79 | + |
| 80 | +\subsection{Качественные характеристики системы} |
| 81 | + |
| 82 | +Данный раздел описывает нефункциональные требования, оказывающие влияние на архитектуру, проектные решения и организацию компонентов системы. |
| 83 | + |
| 84 | +\paragraph{Расширяемость} |
| 85 | + |
| 86 | +Система должна обеспечивать возможность добавления новых распределений, семейств и преобразований без необходимости изменения существующего кода. Расширение должно происходить через зарегистрированные интерфейсы или стандартные механизмы расширения Python. |
| 87 | + |
| 88 | +\paragraph{Модульность и интерфейсы:} |
| 89 | + |
| 90 | +Система должна быть реализована в виде набора Python-модулей с чётко определёнными публичными интерфейсами. Модули должны быть слабо связаны друг с другом, а взаимодействие между ними должно происходить исключительно через открытые контракты. Пакет в целом должен также иметь публичный интерфейс для взаимодействия с пользователем и другими подсистемами PySATL. Внутренние и внешние интерфейсы могут быть различны. |
| 91 | + |
| 92 | +\paragraph{Совместимость} |
| 93 | + |
| 94 | +Система должна быть совместима с остальными компонентами PySATL. Переход на новое ядро должен быть максимально прозрачным для пользователя и не требовать значительных изменений в существующем коде или логике пакетов, использующих ядро. |
| 95 | + |
| 96 | +\paragraph{Тестируемость} |
| 97 | + |
| 98 | +Архитектура должна способствовать покрытию тестами ключевой функциональности системы. Для стадии прототипа допускается ограниченное покрытие, однако оно должно быть достаточным для выявления ошибок при изменении поведения или интерфейсов. |
| 99 | + |
| 100 | +\paragraph{Устойчивость к ошибкам} |
| 101 | + |
| 102 | +Система должна быть устойчива к некорректным пользовательским данным и иметь механизм информирования об ошибках. Поведение при ошибках должно быть контролируемым и предсказуемым, включая диагностику нарушений интерфейсов, типов и других контрактов. |
| 103 | + |
| 104 | +\paragraph{Документируемость и визуализация:} |
| 105 | +Архитектура модулей, их интерфейсы и взаимосвязи должны быть представлены в виде UML-диаграмм и сопровождаться соответствующей технической документацией. Диаграммы должны отражать как общую структуру системы, так и реализацию ключевых компонентов и связей. |
| 106 | + |
| 107 | +тестирование документации |
0 commit comments