stringtranslate.com

Архитектура графа узлов

Узлы шейдера в Blender

Архитектура графа узлов — это программный дизайн, структурированный вокруг понятия графа узлов. Как исходный код , так и пользовательский интерфейс разработаны вокруг редактирования и композиции (или связывания) атомарных функциональных единиц. Графы узлов — это тип визуального языка программирования .

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

Пользовательский интерфейс программного приложения часто визуально отображает граф узлов пользователю. Это часто достигается с помощью графического процессора для выполнения рендеринга, который затем отображается на рабочем столе для пользователя. Обычные API для графического процессораOpenGL и DirectX . Узлы часто рисуются в виде прямоугольников, а соединения между узлами рисуются линиями или сплайнами.

Использование архитектуры узлового графа началось в 1960-х годах. [ необходима цитата ] Сегодня использование узловых графов взорвалось. Области графики, игр и машинного обучения являются основными приверженцами этого программного обеспечения, причем большинство инструментов используют архитектуру узлового графа. [ необходима цитата ]

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

История

Эрик Хосик в Твиттере продолжает попытки собрать снимки всех пользовательских интерфейсов графа узлов в большинстве программных приложений . Эти усилия направлены на документирование эволюции и взрывного развития пользовательских интерфейсов графа узлов, начиная с их первоначальных корней. Эта визуальная история размещена на странице блога под названием Visual Programming Languages ​​- Snapshots. Работа, ведущая к архитектурам графа узлов и визуальному программированию, похоже, началась в 1960-х годах в области, известной как «коммуникации человек-машина».

В диссертации Уильяма Роберта Сазерленда в Массачусетском технологическом институте (1966) «Онлайновая графическая спецификация процедур» он описывает и анализирует темы, связанные с двухмерным изобразительным языком. Это одно из первых исследований рабочих процессов или программ на основе потоков данных . С тех пор его диссертация использовалась в качестве «предшествующего искусства» для того, чтобы сегодня отменять судебные иски по поводу идей потоков данных. Его работа часто считается проложившей путь к тому, что сегодня известно как автоматизированное проектирование (САПР) .

  1. Графическая программа — это естественный способ выражения параллельных процессов. Двумерная природа языка помогает визуализировать множество вещей, происходящих одновременно. [1]
  2. Легкость отладки программ, особенно параллельных, будет улучшена с помощью иллюстрированной языковой формы. Возможность присоединения зондов данных и наблюдения за работой программы дает понимание деталей, которые трудно получить каким-либо другим способом. [1]
  3. Выполнение программы не обязательно должно контролироваться обычными явными соглашениями о последовательном потоке. Движение данных через программу может определять ее работу. Соглашение о контролируемых данных близко соответствует нашим интуитивным представлениям о том, как должна работать графическая программа, а также допускает параллельное программирование без явных обозначений потока. [1]

В 1969 году TO Ellis, JF Heafner и WL Sibley опубликовали статью о графическом языке ввода (GRAIL). Их работа была связана с RAND Tablet , которая началась с исследований Sketchpad , системы, в которой пользователи могли писать компьютерные команды непосредственно на планшете, проведенных Иваном Сазерлендом . Система GRAIL использовала графический язык программирования на основе блок-схем и могла распознавать рукописные буквы и жесты. [2] Алан Кей дал ряд демонстраций системы GRAIL, однако он не принимал участия в создании системы.

  1. Важными организационными концепциями в системе GRAIL являются последовательный поток управления, иерархия подпрограмм и язык (схемы потоков) для наглядного представления организации в рамках концепций первых двух. [2]
  2. Последовательный характер управления позволяет человеку представить себе изолированные процессы, адаптированные к определенным функциям, что, в свою очередь, позволяет организатору рассматривать всю программу в терминах управляемых подчастей. [2]
  3. Иерархия подпрограмм еще сильнее подчеркивает понятие изолированных процессов. [2]
  4. Диаграммы потоков помогают человеку представить свои возможности управления и взаимосвязь между процессами, выражая эти взаимосвязи в двух измерениях. [2]
Граф узлов Blender, 2006

Некоторые из более поздних применений архитектур узловых графов начались около 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 слоя — это входной слой, скрытый слой и выходной слой. Элементы в каждом слое являются весами и связаны с весами в других слоях. Во время вывода алгоритм машинного обучения оценивает веса в выходном слое с помощью последовательности функциональных оценок по весам из предыдущих слоев. Во время обучения алгоритм машинного обучения использует оптимизацию для минимизации функции потерь, где функция потерь зависит от разницы между весами в выходном слое и ожидаемыми значениями. Графы узлов используются для визуализации, настройки и отладки этих слоев нейронной сети.

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

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

Смотрите также

Примечания

  1. ^ abc Сазерленд, Уильям Роберт (1966). Онлайновая графическая спецификация компьютерных процедур (диссертация). Массачусетский технологический институт. hdl :1721.1/13474?show=full.
  2. ^ abcde "Язык графического ввода GRAIL" (PDF) .
  3. ^ Вальверде, Серджи; Соле, Рикар В. (11 июля 2003 г.). «Иерархические малые миры в архитектуре программного обеспечения». arXiv : cond-mat/0307278 .
  4. ^ "Представление и анализ программного обеспечения". CiteSeerX 10.1.1.394.4865 .  {{cite journal}}: Цитировать журнал требует |journal=( помощь )
  5. ^ «Визуальное программирование — это не отстой».
  6. ^ «Визуальное программирование — почему это плохая идея». Октябрь 2018 г.
  7. ^ «Сильные и слабые стороны визуального языка программирования в контексте обучения детей» (PDF) .
  8. ^ «Визуальное программирование: взгляд из академических кругов и промышленности». 1997. doi :10.1145/266399.266415. S2CID  18983760. {{cite journal}}: Цитировать журнал требует |journal=( помощь )
  9. ^ Блэквелл, А. Ф. (1996). «Метакогнитивные теории визуального программирования: что мы думаем, что мы делаем?». Труды симпозиума IEEE 1996 года по визуальным языкам . С. 240–246. doi :10.1109/VL.1996.545293. ISBN 0-8186-7508-X. S2CID  36822160.
  10. ^ "Справочное руководство по ядерному оружию". learn.foundry.com . Получено 21.12.2020 .
  11. ^ "Справочное руководство по катане". learn.foundry.com . Получено 21.12.2020 .
  12. ^ "Справочное руководство по Mari". learn.foundry.com . Получено 21.12.2020 .
  13. ^ "Nuke: Группировка узлов с помощью узла Group". learn.foundry.com . Получено 21.12.2020 .
  14. ^ "Katana: Группировка узлов". learn.foundry.com . Получено 21.12.2020 .

Ссылки