stringtranslate.com

Arquitectura del gráfico de nodos

Nodos de sombreado en Blender

La arquitectura de grafos de nodos es un diseño de software estructurado en torno a la noción de un grafo de nodos. Tanto el código fuente como la interfaz de usuario están diseñados en torno a la edición y composición (o vinculación) de unidades funcionales atómicas. Los grafos de nodos son un tipo de lenguaje de programación visual .

El código fuente de la aplicación de software está organizado en unidades funcionales atómicas llamadas nodos. Esto se hace normalmente utilizando clases derivadas de una clase base para todos los nodos. Cada nodo puede tener entradas y salidas, que normalmente también se implementan utilizando clases derivadas de clases base para todas las entradas y todas las salidas. Las salidas y las entradas pueden hacer referencia entre sí, normalmente mediante punteros a instancias de otras salidas o entradas. Cuando un nodo ejecuta su funcionalidad, recupera sus entradas siguiendo los punteros almacenados en sus entradas para recuperar los datos de salida de otros nodos. A continuación, el nodo ejecuta su operación en estas entradas para producir sus propias salidas. La capacidad de vincular nodos entre sí de esta manera permite dividir tareas o problemas complejos en unidades nodales atómicas que son más fáciles de entender.

La interfaz de usuario de la aplicación de software suele mostrar visualmente el gráfico de nodos al usuario. Esto se suele lograr utilizando la GPU para realizar la representación que posteriormente se muestra en el escritorio para el usuario. Las API comunes para la GPU son OpenGL y DirectX . Los nodos suelen dibujarse como rectángulos y las conexiones entre nodos se dibujan con líneas o splines.

El uso de la arquitectura de gráficos de nodos comenzó en la década de 1960. [ cita requerida ] Hoy en día, el uso de gráficos de nodos se ha disparado. Los campos de gráficos, juegos y aprendizaje automático son los principales adoptantes de este diseño de software, y la mayoría de las herramientas utilizan la arquitectura de gráficos de nodos. [ cita requerida ]

Hasta el día de hoy, existe cierto debate sobre los beneficios de la programación visual y la arquitectura de gráficos de nodos. Los defensores destacan cómo la abstracción que proporcionan los gráficos de nodos hace que la herramienta sea más fácil de usar. Los críticos destacan cómo la programación visual es demasiado restrictiva y cómo deben recurrir a la modificación del código fuente o de los scripts para realizar sus tareas.

Historia

Eric Hosick está realizando un esfuerzo en Twitter para recopilar instantáneas de todas las interfaces de usuario de gráficos de nodos en la mayoría de las aplicaciones de software . El esfuerzo intenta documentar la evolución y explosión de las interfaces de usuario de gráficos de nodos a partir de sus raíces iniciales. Esta historia visual está alojada en una página de blog llamada Visual Programming Languages ​​- Snapshots. El trabajo que condujo a las arquitecturas de gráficos de nodos y la programación visual parece haber comenzado en la década de 1960, en el área conocida como "comunicaciones hombre-máquina".

En la tesis de William Robert Sutherland en el MIT (1966) "Especificación gráfica en línea de procedimientos", describe y analiza temas relacionados con un lenguaje pictórico en 2D. Se trata de una de las primeras investigaciones sobre flujos de trabajo o programas basados ​​en flujos de datos . Desde entonces, su tesis se ha utilizado como "antecedentes" para anular demandas judiciales sobre ideas de flujos de datos en la actualidad. Su trabajo suele considerarse el precursor de lo que hoy se conoce como diseño asistido por ordenador (CAD) .

  1. Un programa pictórico es una forma natural de expresar procesos paralelos. La naturaleza bidimensional del lenguaje ayuda a visualizar muchas cosas que suceden a la vez. [1]
  2. La facilidad de depuración de programas, en particular los paralelos, se verá mejorada con un lenguaje gráfico. La posibilidad de conectar sondas de datos y ver cómo se ejecuta un programa permite comprender detalles que son difíciles de obtener de cualquier otra forma. [1]
  3. La ejecución de un programa no necesita estar controlada por las convenciones de flujo secuencial explícitas habituales. El movimiento de datos a través de un programa puede determinar su funcionamiento. Una convención controlada por datos se corresponde estrechamente con nuestras ideas intuitivas de cómo debería funcionar un programa gráfico y también permite la programación paralela sin designaciones de flujo explícitas. [1]

En 1969, TO Ellis, JF Heafner y WL Sibley publicaron un artículo sobre un lenguaje de entrada gráfica (GRAIL). Su trabajo estaba relacionado con la tableta RAND , que comenzó con la investigación sobre Sketchpad , un sistema en el que los usuarios podían escribir comandos de computadora directamente en una tableta, realizada por Ivan Sutherland . El sistema GRAIL usaba un lenguaje de programación gráfica basado en diagramas de flujo y podía reconocer letras y gestos escritos a mano. [2] Alan Kay ha realizado varias demostraciones del sistema GRAIL, sin embargo, no estuvo involucrado en la creación del sistema.

  1. Los conceptos organizativos importantes en el sistema GRAIL son el flujo secuencial de control, la jerarquía de subrutinas y el lenguaje (diagramas de flujo) para relacionar gráficamente la organización dentro de los conceptos de los dos primeros. [2]
  2. La naturaleza secuencial del control permite al hombre imaginar procesos aislados que se adaptan a funciones específicas, lo que, a su vez, permite al organizador pensar en el programa total en términos de subpartes manejables. [2]
  3. La jerarquía de subrutinas enfatiza aún más fuertemente la noción de procesos aislados. [2]
  4. Los diagramas de flujo ayudan al hombre a visualizar sus opciones de control y la relación entre procesos al expresar estas interrelaciones en dos dimensiones. [2]
Gráfico de nodos de Blender, 2006

Algunos de los usos más recientes de las arquitecturas de grafos de nodos comenzaron alrededor de 2005. En este período, los grafos de nodos comenzaron a desarrollar paradigmas para lidiar con la complejidad en el grafo de nodos. La complejidad surgió a medida que aumentaba la cantidad de nodos y enlaces en el grafo. Una de las ideas principales que abordaban la complejidad era el concepto de un nodo de grupo o paquete que ocultaba nodos dentro de sí mismo, exponiendo solo las entradas y salidas del grupo.

Abstracción y complejidad

En el artículo Hierarchical Small Worlds in Software Architecture [3], el autor Sergi Valverde sostiene que la mayoría de los grandes sistemas de software se construyen de forma modular y jerárquica, y que los grafos de nodos se pueden utilizar para analizar grandes sistemas de software. Muchos otros artículos de análisis de software suelen utilizar grafos de nodos para analizar grandes sistemas de software, lo que sugiere que los grafos de nodos son buenos modelos de la estructura interna y el funcionamiento del software. [4]

Debate sobre programación visual

Los gráficos de nodos son un subconjunto de la clase más amplia de lenguajes de programación visual . Los gráficos de nodos permiten diseñar programas de forma visual y estructurada en lugar de hacerlo mediante la creación de código fuente . En las industrias del cine y los videojuegos , los gráficos de nodos son sinónimos de programación visual. Actualmente, existe cierto debate sobre el poder, la abstracción y la necesidad de los gráficos de nodos y los lenguajes de programación visual.

Este tema sigue siendo un tema de debate activo y, hasta el día de hoy, se están produciendo nuevas discusiones en foros abiertos. A continuación, se enumeran algunas de las discusiones más importantes hasta la fecha.

Los estudios de investigación tienden a arrojar más detalles sobre estas discusiones y resaltar más las ventajas y desventajas de los gráficos de nodos. Indican que los gráficos de nodos y la programación visual son fáciles de entender para los nuevos usuarios, pero a medida que los usuarios pasan a tareas más complejas, a menudo necesitan recurrir a la creación de código fuente textual . [7] Otra encuesta se centra en las creencias de las personas sobre los efectos cognitivos de la programación visual, en la que encontraron que los programadores profesionales son los más escépticos de la programación visual. [8] Otros estudios han demostrado en experimentos psicológicos que la programación visual puede tener efectos positivos significativos en el desempeño en tareas cognitivas. [9]

Gráfico de nodos

Un ejemplo de gráfico de nodos

En el contexto de la arquitectura de software, un gráfico de nodos se refiere a una organización de la funcionalidad del software en unidades atómicas conocidas como nodos, y donde los nodos pueden conectarse entre sí a través de enlaces. La manipulación de nodos y enlaces en el gráfico de nodos se puede lograr a menudo a través de una API programable o mediante una interfaz visual utilizando el mouse . En el diagrama anterior, el gráfico de nodos aparece en el lado derecho.

En el uso actual, el término "grafo de nodos" es una palabra compuesta abierta. Sin embargo, en el software más antiguo se lo denominaba "grafo de nodos", una palabra compuesta cerrada.

Nodo

Los nodos realizan algún tipo de cálculo. Encapsulan esta funcionalidad ejecutable y, a menudo, toman entradas y producen salidas como subproducto de la ejecución . Un ejemplo simple es un nodo que suma dos números. Las entradas son los dos números que se van a sumar y la salida es la suma de los dos números.

Los nodos son análogos a funciones matemáticas de la siguiente forma.

,

donde es el cálculo del nodo, es un vector de los valores de entrada del nodo y es un vector de los valores de salida del nodo.

Visualmente, los nodos suelen representarse mediante rectángulos. Sin embargo, no todas las aplicaciones siguen esta convención. En el diagrama anterior, hay tres nodos denominados "Video", "Agregar estrella" y "Agregar círculo".

Parámetros del nodo

Los nodos suelen tener parámetros adicionales que definen su ejecución . Estos parámetros están respaldados por tipos de datos en el código fuente del nodo .

Matemáticamente, se pueden considerar valores de entrada adicionales a la función de cálculo del nodo. La única diferencia es que estos valores son controlados directamente por el usuario en lugar de ser generados por otro nodo como un subproducto de su ejecución . Por ejemplo, en el ejemplo simple anterior sobre un nodo que suma dos números, podemos introducir un parámetro de sesgo en el nodo para que este pueda agregar un número fijo adicional a la suma.

Los parámetros del nodo suelen quedar expuestos visualmente después de que el usuario hace clic en él. Esto ayuda a reducir la saturación visual del gráfico del nodo. En el diagrama anterior, vemos que se abre una ventana de parámetros junto al nodo "Agregar estrella".

Entradas y salidas de nodos

Los nodos suelen tener entradas y salidas, como se explicó anteriormente. Las entradas y salidas están respaldadas por tipos de datos en el código fuente del nodo . Las entradas y salidas son cruciales para almacenar valores antes y después de la ejecución del nodo .

Matemáticamente, las entradas y salidas del nodo son análogas a los valores de entrada y salida de las funciones.

,

donde es el cálculo del nodo, es un vector de los valores de entrada del nodo y es un vector de los valores de salida del nodo.

Visualmente, las entradas y salidas de los nodos a menudo se representan con círculos.

Enlaces de nodos

Los enlaces transfieren los valores almacenados en tipos de datos entre diferentes nodos. Son análogos a la composición matemática. Por ejemplo, si el nodo A envía sus salidas al nodo B, esto se puede representar matemáticamente de la siguiente manera.

,

donde y son las operaciones realizadas por el nodo B y el nodo A, es un vector de los valores de entrada del nodo A y es un vector de los valores de salida del nodo B.

Tipos de nodos

El tipo de nodo indica qué operación de cálculo realizará cuando se ejecute . Suele haber muchos tipos de nodos diferentes que participan en el gráfico de nodos. A continuación, se muestran algunos ejemplos:

El tipo de nodo más importante para gestionar la complejidad es el nodo de grupo. Este tipo de nodo no ejecuta el código de software de la misma manera que otros nodos. Este nodo simplemente agrupa un subconjunto de nodos conectados y gestiona las entradas y salidas dentro o fuera del grupo. Esto oculta la complejidad dentro de los nodos del grupo y limita su acoplamiento con otros nodos fuera del grupo. Esto conduce a una jerarquía donde los gráficos más pequeños se incrustan en los nodos del grupo. Los siguientes son ejemplos de nodos de grupo que se utilizan para agrupar un subconjunto de nodos conectados y ayudar a simplificar el gráfico.

Interfaz de usuario

Las aplicaciones de software que utilizan la arquitectura de gráficos de nodos normalmente expondrán el gráfico de nodos de forma visual o gráfica al usuario, lo que le permitirá realizar cambios en el gráfico de nodos. Con el ratón , los usuarios normalmente podrán:

Con el aumento del uso de gráficos de nodos, actualmente se presta más atención a la creación de interfaces fáciles de usar. A menudo, estas nuevas interfaces están siendo diseñadas por especialistas en interfaces de usuario y diseñadores gráficos. A continuación, se muestran algunas interfaces de usuario diseñadas por artistas y diseñadores.

Grafos acíclicos dirigidos

Ejemplo de gráfico acíclico dirigido

Muchos resultados teóricos de la teoría de grafos se aplican a los grafos de nodos, especialmente en lo que respecta a la topología . Esta área temática, en la que los nodos se vinculan entre sí para formar grafos, ha sido ampliamente estudiada.

Un área particular de preocupación durante la evaluación de gráficos de nodos son los ciclos . Cuando hay ciclos en el gráfico de nodos, la evaluación nunca termina ya que los nodos se ejecutan continuamente siguiendo los enlaces. Para evitar estos problemas, muchas arquitecturas de gráficos de nodos se limitan a un subconjunto de gráficos conocidos como gráficos acíclicos dirigidos .

Uso en gráficos por computadora

Un ejemplo de una interfaz de usuario basada en un gráfico de nodos

El uso de la arquitectura de grafos de nodos en el diseño de software es especialmente popular en las industrias cinematográfica y de videojuegos . El diagrama anterior muestra una interfaz de usuario simplificada para una herramienta artística para editar y crear videos. Los nodos se representan como rectángulos y están conectados entre sí a través de líneas curvas ( curvas de Bézier ). En el modelo operativo de este software, se pasa una secuencia de video a través de las líneas hacia el siguiente nodo, y cada nodo realiza algunas modificaciones adicionales a la secuencia de video. En este ejemplo, un video se traduce en 2D, otro se pixela y, finalmente, se fusionan ambas secuencias.

Los siguientes son algunos ejemplos de software que utilizan la arquitectura de gráficos de nodos en las industrias del cine y los videojuegos .

Uso en aprendizaje automático

Capas de redes neuronales simples

El uso de la arquitectura de grafos de nodos en el diseño de software se ha vuelto muy popular recientemente en las aplicaciones de aprendizaje automático . El diagrama anterior muestra una red neuronal simple compuesta por 3 capas. Las 3 capas son la capa de entrada, la capa oculta y la capa de salida. Los elementos de cada capa son pesos y están conectados a pesos en otras capas. Durante la inferencia, el algoritmo de aprendizaje automático evalúa los pesos en la capa de salida a través de una secuencia de evaluaciones funcionales sobre los pesos de las capas anteriores. Durante el entrenamiento, el algoritmo de aprendizaje automático utiliza la optimización para minimizar una función de pérdida, donde la función de pérdida depende de la diferencia entre los pesos en la capa de salida y los valores esperados. Los grafos de nodos se utilizan para visualizar, configurar y depurar estas capas de la red neuronal.

Los siguientes son ejemplos de software de aprendizaje automático que utiliza una arquitectura de gráficos de nodos sin una interfaz gráfica para los gráficos de nodos.

Los siguientes son algunos ejemplos de software de aprendizaje automático que utiliza una arquitectura de gráfico de nodos .

Véase también

Notas

  1. ^ abc Sutherland, William Robert (1966). La especificación gráfica en línea de procedimientos informáticos (Tesis). Instituto Tecnológico de Massachusetts. hdl :1721.1/13474?show=full.
  2. ^ abcde "Lenguaje de entrada gráfica GRAIL" (PDF) .
  3. ^ Valverde, Sergi; Sole, Ricard V. (11 de julio de 2003). "Pequeños mundos jerárquicos en la arquitectura de software". arXiv : cond-mat/0307278 .
  4. ^ "Representación y análisis de software". CiteSeerX 10.1.1.394.4865 .  {{cite journal}}: Requiere citar revista |journal=( ayuda )
  5. ^ "La programación visual no apesta".
  6. ^ "Programación visual: por qué es una mala idea". Octubre de 2018.
  7. ^ "Fortalezas y debilidades de un lenguaje de programación visual en un contexto de aprendizaje con niños" (PDF) .
  8. ^ "Programación visual: la perspectiva desde la academia y la industria". 1997. doi :10.1145/266399.266415. S2CID  18983760. {{cite journal}}: Requiere citar revista |journal=( ayuda )
  9. ^ Blackwell, AF (1996). "Teorías metacognitivas de la programación visual: ¿qué creemos que estamos haciendo?". Actas del Simposio IEEE sobre lenguajes visuales de 1996. págs. 240-246. doi :10.1109/VL.1996.545293. ISBN 0-8186-7508-X. Número de identificación del sujeto  36822160.
  10. ^ "Guía de referencia de armas nucleares". learn.foundry.com . Consultado el 21 de diciembre de 2020 .
  11. ^ "Guía de referencia de katana". learn.foundry.com . Consultado el 21 de diciembre de 2020 .
  12. ^ "Guía de referencia de Mari". learn.foundry.com . Consultado el 21 de diciembre de 2020 .
  13. ^ "Nuke: Agrupamiento de nodos con el nodo de grupo". learn.foundry.com . Consultado el 21 de diciembre de 2020 .
  14. ^ "Katana: Agrupamiento de nodos". learn.foundry.com . Consultado el 21 de diciembre de 2020 .

Referencias