Понятие детерминированности

Каждый раз, когда вы запускаете узел в PolyAnalyst, система выполняет процесс определенного типа, например, импорт данных, фильтрация колонок или записей, или статистический анализ. Эти процессы могут быть детерминированными и недетерминированными.

Процесс называется детерминированным, если для завершения задачи этот процесс в среднем выполняет те же шаги и тратит то же количество времени при обработке одних и тех же входных данных.

И наоборот, процесс называется недетерминированным, если для выполнения задачи требуется разное количество шагов или времени, и при одинаковых входных данных одинаковый результат не гарантирован.

Например, рассмотрим процесс проезда из пригорода в город на работу. Можно сказать, что, в целом, это – детерминированный процесс. Грубо говоря, вы преодолеваете одно и то же расстояние от дома до офиса ежедневно и тратите для этого примерно то же время.

Но эта ситуация не столь однозначна.

Например, если вы добираетесь на работу на машине, то на вашу поездку влияет случайность алгоритма работы светофора, который регулируется тем населенном пунктом, через который вы проезжаете. Если вы выезжаете на работу на одну минуту позже, чем обычно, то потенциально вы можете простоять на красном свете светофора дольше, что увеличивает время поездки. Случайность остановки на красный свет позволяет утверждать, что данный процесс является недетерминированным.

Также на поездку может повлиять плотность дорожного движения, поскольку в это время на дорогах находится большое количество других водителей. Учитывая то, что вы не можете управлять поведением миллионов других людей, которые работают в том же населенном пункте, что и вы, то число других людей на дороге также будет внешним фактором, который убеждает нас в том, что данный процесс не является детерминированным.

Но и в этом случае мы можем назвать процесс детерминированным, если проигнорируем все внешние факторы. Обычно, когда речь идет об описании процессов, такие внешние факторы игнорируются; детерминированность процесса определяется только теми факторами, которые не являются внешними, а, наоборот, являются внутренними сущностными характеристиками процесса.

Другими словами, процесс перемещения из дома до офиса в действительности зависит от того, добираетесь ли вы на работу пешком, на автобусе, на машине или на метро (средняя скорость транспорта), делаете ли вы по пути повороты налево или направо, а также от того, как далеко вы живете от работы.

Знание того, является ли процесс детерминированным в PolyAnalyst, помогает оценить его производительность и масштабируемость. Как правило, поведение детерминированного процесса описать проще. Можно сказать, что для его завершения требуется определенное количество шагов и определенное количество времени. Конечно, при этом внешние факторы (например, изменение приоритетности одновременно выполняемых процессов) должны быть сведены к минимуму, или, по крайней мере, они должны быть постоянными. При условии постоянного наличия внешних факторов (например, имеются другие пользователи, которые работают на этом же сервере PolyAnalyst; компьютер выполняет сканирование на вирусы по неизвестному графику; происходит резкий перепад напряжения или отключение питания и т.д.), трудно сказать, какие процессы в PolyAnalyst являются действительно детерминированными. Однако, с академической точки зрения, можно сказать, что эти внешние факторы не играют существенной роли, либо их присутствие сведено до минимума, либо такие факторы являются константами. Следовательно, мы можем сделать некоторые общие заключения относительно производительности различных узлов.

Большинство узлов в PolyAnalyst являются детерминированными. Такие узлы производят идентичные результаты при каждом запуске узла. Например, графический узел всегда будет создавать один и тот же график, если использовать одни и те же данные на входе; на выполнение узла будет уходить одинаковое количество времени и расходоваться одинаковый объем памяти.

С другой стороны, узел Выборка не будет производить одни и те же данные при каждом запуске. На самом деле, результат узла может быть одинаковым, но вероятность такого исхода очень низкая. Пользователи никогда не будут достоверно знать, что они воспроизведут предыдущий результат. В конце концов, смысл случайной выборки заключается в создании случайной выборки. Строки в выходных данных должны быть случайными при каждом запуске узла. Должна быть высокая вероятность того, что каждое выполнение узла позволит получить новый результат. Фактически, алгоритм создания случайной выборки, который производит идентичные результаты при каждом срабатывании, является бесполезным. Таким образом, этот узел считается недетерминированным.

Многие узлы анализа данных в PolyAnalyst не являются детерминированными. Некоторые моделирующие узлы используют алгоритмы, которые при запуске делают случайный выбор. При каждом запуске таких узлов они принимают решения в рандомном порядке. Следовательно, при каждом запуске эти узлы могут генерировать разные модели. Сложно определить, сколько времени потребуется на выполнение этих узлов.