Архитектура графа узлов — это программный дизайн, структурированный вокруг понятия графа узлов. Как исходный код , так и пользовательский интерфейс разработаны вокруг редактирования и композиции (или связывания) атомарных функциональных единиц. Графы узлов — это тип визуального языка программирования .
Исходный код для программного приложения организован в атомарные функциональные единицы, называемые узлами. Обычно это делается с использованием классов, производных от базового класса для всех узлов. Каждый узел может иметь входы и выходы, которые обычно также реализуются с использованием классов, производных от базовых классов для всех входов и всех выходов. Выходы и входы могут ссылаться друг на друга, как правило, удерживая указатели на экземпляры других выходов или входов. Когда узел выполняет свою функциональность, он извлекает свои входы, следуя указателям, хранящимся в его входах, для извлечения выходных данных другими узлами. Затем узел выполняет свою операцию над этими входами, чтобы создать свои собственные выходы. Возможность связывать узлы вместе таким образом позволяет разбивать сложные задачи или проблемы на атомарные узловые единицы, которые легче понять.
Пользовательский интерфейс программного приложения часто визуально отображает граф узлов пользователю. Это часто достигается с помощью графического процессора для выполнения рендеринга, который затем отображается на рабочем столе для пользователя. Обычные API для графического процессора — OpenGL и DirectX . Узлы часто рисуются в виде прямоугольников, а соединения между узлами рисуются линиями или сплайнами.
Использование архитектуры узлового графа началось в 1960-х годах. [ необходима цитата ] Сегодня использование узловых графов взорвалось. Области графики, игр и машинного обучения являются основными приверженцами этого программного обеспечения, причем большинство инструментов используют архитектуру узлового графа. [ необходима цитата ]
По сей день ведутся споры о преимуществах визуального программирования и архитектуры графа узлов. Сторонники подчеркивают, как абстракция, которую предоставляют графы узлов, делает инструмент более простым в использовании. Критики подчеркивают, что визуальное программирование слишком ограничительно и что им приходится прибегать к изменению исходного кода или скриптов для выполнения своих задач.
Эрик Хосик в Твиттере продолжает попытки собрать снимки всех пользовательских интерфейсов графа узлов в большинстве программных приложений . Эти усилия направлены на документирование эволюции и взрывного развития пользовательских интерфейсов графа узлов, начиная с их первоначальных корней. Эта визуальная история размещена на странице блога под названием Visual Programming Languages - Snapshots. Работа, ведущая к архитектурам графа узлов и визуальному программированию, похоже, началась в 1960-х годах в области, известной как «коммуникации человек-машина».
В диссертации Уильяма Роберта Сазерленда в Массачусетском технологическом институте (1966) «Онлайновая графическая спецификация процедур» он описывает и анализирует темы, связанные с двухмерным изобразительным языком. Это одно из первых исследований рабочих процессов или программ на основе потоков данных . С тех пор его диссертация использовалась в качестве «предшествующего искусства» для того, чтобы сегодня отменять судебные иски по поводу идей потоков данных. Его работа часто считается проложившей путь к тому, что сегодня известно как автоматизированное проектирование (САПР) .
В 1969 году TO Ellis, JF Heafner и WL Sibley опубликовали статью о графическом языке ввода (GRAIL). Их работа была связана с RAND Tablet , которая началась с исследований Sketchpad , системы, в которой пользователи могли писать компьютерные команды непосредственно на планшете, проведенных Иваном Сазерлендом . Система GRAIL использовала графический язык программирования на основе блок-схем и могла распознавать рукописные буквы и жесты. [2] Алан Кей дал ряд демонстраций системы GRAIL, однако он не принимал участия в создании системы.
Некоторые из более поздних применений архитектур узловых графов начались около 2005 года. В этот период узловые графы начинают разрабатывать парадигмы для работы со сложностью в узловом графе. Сложность возрастала по мере увеличения количества узлов и связей в графе. Одной из основных идей, связанных со сложностью, была концепция узла группы или пакета, который скрывал узлы внутри себя, открывая только входы и выходы группы.
В статье Hierarchical Small Worlds in Software Architecture [3] автор Серджи Вальверде утверждает, что большинство крупных программных систем построены в модульной и иерархической манере, и что графы узлов могут использоваться для анализа крупных программных систем. Во многих других работах по анализу программного обеспечения графы узлов часто используются для анализа крупных программных систем, предполагая, что графы узлов являются хорошими моделями внутренней структуры и работы программного обеспечения. [4]
Графы узлов являются подмножеством более широкого класса визуальных языков программирования . Графы узлов позволяют вам разрабатывать программы визуально и структурированно, а не через написание исходного кода . В индустрии кино и видеоигр графы узлов являются синонимом визуального программирования. В настоящее время ведутся споры о мощности, абстракции и необходимости графов узлов и визуальных языков программирования.
Это остается активной областью дебатов с новыми обсуждениями, происходящими на открытых форумах по сей день. Ниже приведены некоторые из самых крупных обсуждений на сегодняшний день.
Исследования, как правило, проливают больше информации на эти обсуждения и подчеркивают больше преимуществ и недостатков графов узлов. Они указывают, что графы узлов и визуальное программирование просты для понимания новыми пользователями, но по мере того, как пользователи переходят к более сложным задачам, им часто приходится прибегать к написанию текстового исходного кода . [7] Другое исследование фокусируется на убеждениях людей относительно когнитивных эффектов визуального программирования, в котором они обнаружили, что профессиональные программисты наиболее скептически относятся к визуальному программированию. [8] Другие исследования показали в психологических экспериментах, что визуальное программирование может оказывать значительное положительное влияние на производительность в когнитивных задачах. [9]
Граф узлов в контексте архитектуры программного обеспечения относится к организации функциональности программного обеспечения в атомарные единицы, известные как узлы, и где узлы могут быть соединены друг с другом посредством ссылок. Манипулирование узлами и ссылками в графе узлов часто может осуществляться через программируемый API или через визуальный интерфейс с помощью мыши . На диаграмме выше граф узлов отображается с правой стороны.
В современном использовании термин «node graph» является открытым составным словом. Однако в старом программном обеспечении он назывался «nodegraph», закрытым составным словом.
Узлы выполняют некоторый тип вычислений. Они инкапсулируют эту исполняемую функциональность и часто принимают входные данные и производят выходные данные как побочный продукт выполнения . Простым примером является узел, который складывает два числа. Входные данные — это два числа для сложения, а выходные данные — это сумма двух чисел.
Узлы аналогичны математическим функциям следующего вида.
где — вычисление узла, — вектор входных значений узла, — вектор выходных значений узла.
Визуально узлы часто представляются прямоугольниками. Однако это не соглашение, которому следуют все приложения. На диаграмме выше есть три узла с метками «Видео», «Добавить звезду» и «Добавить круг».
Узлы часто имеют дополнительные параметры, которые определяют их выполнение . Эти параметры поддерживаются типами данных в исходном коде узла .
Математически их можно рассматривать как дополнительные входные значения для вычислительной функции узла. Единственное отличие состоит в том, что эти значения контролируются непосредственно пользователем, а не выводятся другим узлом как побочный продукт его выполнения . Например, в простом примере выше, касающемся узла, который складывает два числа, мы можем ввести параметр смещения на узле, чтобы узел мог добавить дополнительное фиксированное число к сумме.
Визуально параметры узла часто отображаются после того, как пользователь нажимает на узел. Это помогает уменьшить визуальное загромождение графика узла. На диаграмме выше мы видим окно параметров, открывающееся рядом с узлом «Добавить звезду».
Узлы часто имеют входы и выходы, как обсуждалось выше. Входы и выходы поддерживаются типами данных в исходном коде узла . Входы и выходы имеют решающее значение для хранения значений до и после выполнения узла .
Математически входы и выходы узла аналогичны входным и выходным значениям функций.
где — вычисление узла, — вектор входных значений узла, — вектор выходных значений узла.
Визуально входы и выходы узлов часто представляются кружками.
Связи передают значения, хранящиеся в типах данных , между различными узлами. Они аналогичны математической композиции. Например, если узел A подает свои выходы в узел B, это можно представить математически следующим образом.
где и — операции, выполняемые узлом B и узлом A, — вектор входных значений узла A, — вектор выходных значений узла B.
Тип узла указывает, какую вычислительную операцию он выполнит при выполнении . Часто в графе узлов участвует много разных типов узлов. Ниже приведены некоторые примеры:
Самым важным типом узла для управления сложностью является групповой узел. Этот тип узла не выполняет программный код так же, как другие узлы. Этот узел просто группирует подмножество связанных узлов вместе и управляет входами и выходами в группу или из нее. Это скрывает сложность внутри групповых узлов и ограничивает их связь с другими узлами вне группы. Это приводит к иерархии, в которой меньшие графы встроены в групповые узлы. Ниже приведены примеры групповых узлов, которые используются для группировки подмножества связанных узлов и для упрощения графа.
Программные приложения, использующие архитектуру графа узлов, обычно представляют граф узлов визуально или графически пользователю, позволяя пользователю вносить изменения в граф узлов. Используя мышь , пользователи обычно могут:
С ростом использования графов узлов в настоящее время все больше внимания уделяется созданию удобных для пользователя интерфейсов. Часто эти новые интерфейсы разрабатываются специалистами по пользовательским интерфейсам и графическими дизайнерами. Ниже приведены некоторые пользовательские интерфейсы, разработанные художниками и дизайнерами.
Многие теоретические результаты теории графов применимы к графам узлов, особенно в отношении топологии . Эта предметная область, где узлы связаны вместе для формирования графов , хорошо изучена.
Одной из особых областей беспокойства при оценке графа узлов являются циклы . Когда в графе узлов присутствуют циклы, оценка никогда не заканчивается, поскольку узлы непрерывно выполняются по следующим ссылкам. Чтобы избежать этих проблем, многие архитектуры графов узлов ограничивают себя подмножеством графов, известных как направленные ациклические графы .
Использование архитектуры графа узлов в разработке программного обеспечения особенно популярно в индустрии кино и видеоигр . На схеме выше показан упрощенный пользовательский интерфейс для художественного инструмента для редактирования и создания видео. Узлы представлены в виде прямоугольников и соединены друг с другом посредством кривых ( кривых Безье ). В операционной модели этого программного обеспечения видеопоследовательность передается по линиям на следующий узел, и каждый узел выполняет некоторые дополнительные изменения видеопоследовательности. В этом примере одно видео преобразуется в 2D, другое пикселизируется, и, наконец, оба потока объединяются.
Ниже приведены некоторые примеры программного обеспечения, использующего архитектуру графа узлов в индустрии кино и видеоигр .
Использование архитектуры графа узлов в разработке программного обеспечения в последнее время стало очень популярным в приложениях машинного обучения . На схеме выше показана простая нейронная сеть, состоящая из 3 слоев. 3 слоя — это входной слой, скрытый слой и выходной слой. Элементы в каждом слое являются весами и связаны с весами в других слоях. Во время вывода алгоритм машинного обучения оценивает веса в выходном слое с помощью последовательности функциональных оценок по весам из предыдущих слоев. Во время обучения алгоритм машинного обучения использует оптимизацию для минимизации функции потерь, где функция потерь зависит от разницы между весами в выходном слое и ожидаемыми значениями. Графы узлов используются для визуализации, настройки и отладки этих слоев нейронной сети.
Ниже приведены примеры программного обеспечения для машинного обучения , использующего архитектуру узлового графа без графического интерфейса для узловых графов.
Ниже приведены некоторые примеры программного обеспечения для машинного обучения , использующего архитектуру узлового графа .
{{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь ){{cite journal}}
: Цитировать журнал требует |journal=
( помощь )