Skip to main content

Visión general

Una Entidad es un ítem que fluye a través de una simulación: una orden de trabajo, un producto terminado, un palet, un lote, un paciente, un camión. Toda simulación gira en torno a entidades que se crean, enrutan, procesan y terminan. Lo que hace poderosas a las entidades en ProDex no es el concepto de “cosas que fluyen por un grafo”: es que las entidades llevan consigo atributos tipados, y las expresiones en todo el modelo pueden leer y actuar sobre esos atributos. Una entidad no es solo un token anónimo; es un conjunto de datos tipados que los componentes inspeccionan, usan para enrutar, procesan con tiempos distintos y agregan. Este es el mecanismo que convierte un diagrama de flujo estático en un modelo que responde al trabajo específico que se está realizando. Los tipos de entidad son una de las primeras cosas que defines al construir un modelo; consulta Conceptos clave para ver dónde se ubican en la jerarquía Fábrica > Modelos, y Resumen de la simulación para el flujo de trabajo de modelado en torno a ellos.

Tipos de atributo

Cada tipo de entidad define un conjunto de atributos con nombre. El desplegable Tipo del atributo ofrece cinco tipos. Un atributo Número también tiene un control de Dominio, Real (el predeterminado) o Entero; eso es una configuración de Número, no un tipo separado. Los tipos Lista son enums, no listas. Un atributo Lista de Texto no contiene varias cadenas: contiene una sola cadena, elegida de un conjunto fijo de valores permitidos declarados en el tipo de entidad. Lo mismo para Lista de Números: el valor del atributo es un número elegido de un conjunto predefinido. Piénsalos como valores categóricos restringidos, no arreglos. Usa Lista de Texto o Lista de Números cuando quieras que un atributo sea categórico y quieras que la plataforma exija valores válidos. Usa Texto o Número cuando el atributo sea abierto. Los tipos de atributo son fijos en el tipo de entidad: no puedes guardar un número en un atributo Texto. El lenguaje de expresiones respeta estos tipos cuando referencias atributos por nombre.

Cómo fluyen los atributos

Los atributos asignados a una entidad persisten con ella durante todo el flujo. Una vez asignados, los componentes aguas abajo pueden leerlos sin ninguna propagación explícita.
  • Crear / asignar: los atributos se asignan cada vez que un componente produce una nueva entidad. Eso ocurre en Fuentes (creando entidades iniciales), Combinadores (entidad de salida de un lote), Separadores (entidades de salida de una división), Transformadores (entidad de salida de un cambio de tipo), y liberaciones de material en una Fuente o un Búfer dentro de una programación. Un Separador tiene un conjunto de asignaciones distinto para cada tipo de entidad de salida, porque una sola división puede emitir varios tipos de salida.
  • Leer: cualquier expresión aguas abajo en un contexto de una sola entidad puede referenciar el atributo por su nombre simple (priority, weight).
  • Cambiar identidad: un Transformador produce una entidad nueva de un tipo distinto con sus propias asignaciones de atributos. No muta los atributos de la entidad de entrada en el lugar: emite una entidad distinta, con otro tipo, con sus propios valores de atributo.
  • Agregar: cuando se combinan entidades, los atributos de la entidad de salida se calculan a partir del conjunto de entradas usando funciones de agregación como SUM(weight) o MAX(priority) en el contexto multi-entidad del Combinador.
El traspaso de atributos del Transformador no es automático. Cuando un Transformador emite una entidad de salida, ninguno de los atributos de la entidad de entrada se copia de forma predeterminada. Cada atributo que quieras en la salida debe asignarse explícitamente, casi siempre como una expresión DSL que referencia el atributo de entrada por su nombre simple. Si omites una asignación, el valor simplemente no se transporta: pérdida silenciosa de datos. Las salidas del Separador se comportan igual.
El DSL no requiere un prefijo para leer atributos: solo usa el nombre simple. priority y product_class son identificadores válidos en cualquier expresión que tenga una entidad en alcance.

En qué contexto se ejecuta cada asignación

La trampa de autoría más grande con los atributos es olvidar en qué contexto de expresión se evalúa una asignación: Los nombres de atributo tampoco pueden coincidir con las palabras clave reservadas del DSL: el validador rechaza un tipo de entidad cuyo atributo eclipse una.

Estrategias de asignación

Cada vez que un componente asigna un atributo en una entidad nueva (en una Fuente, Combinador, Separador o Transformador), eliges una Estrategia para ello. El desplegable ofrece distintas estrategias según el tipo del atributo:
Aleatorio y Distribución son estrategias distintas. Aleatorio elige de forma uniforme entre las opciones declaradas del atributo (Lista de Texto / Lista de Números). Distribución toma una muestra numérica de una distribución de probabilidad (solo Número).
No elijas Expresión DSL para un atributo de Lista de Texto o Lista de Números. El desplegable la lista para esos tipos, pero la validación la rechaza. Para valores categóricos, usa Aleatorio, Round Robin o Ponderado.
Las liberaciones de material en una programación también asignan atributos. En el Editor de Programación defines un valor fijo para cada atributo.

Detalle de las estrategias

Fijo: el mismo valor en cada entidad. Útil para atributos que no varían entre ítems, o como marcador de posición antes de conectar variabilidad real. En atributos Lista de Texto / Lista de Números, el valor fijo debe ser una de las opciones declaradas. Expresión DSL: el valor es el resultado de una expresión DSL evaluada cuando se crea la entidad. Úsala cuando el valor dependa del estado de la simulación, de otros atributos o del tiempo actual: IF(SIM_TIME < SHIFT_1_END, "day", "night") o LOOKUP(priority_by_class, product_class). No es válida para Lista de Texto o Lista de Números: usa Ponderado o Aleatorio para selección categórica. Round Robin: la primera entidad recibe la primera opción, la segunda recibe la segunda, y así sucesivamente, volviendo a la primera después de la última. Útil para distribuir entidades entre categorías de forma pareja sin aleatoriedad. Round Robin no tiene opciones propias: recorre las opciones declaradas en el atributo. Aleatorio: elección aleatoria uniforme entre las opciones declaradas del atributo. Cada opción tiene igual probabilidad. Distribución: toma una muestra de una distribución (normal, exponencial, triangular, etc.). Útil para variabilidad natural: pesos de entidad extraídos de una normal, requisitos de tiempo de servicio extraídos de una triangular, o intervalos de llegada extraídos de una exponencial. Ponderado: elige entre las opciones del atributo con pesos por opción. Especifica un peso para cada opción; los pesos relativos determinan la probabilidad de selección. Si necesitas pesos que cambien con el estado de la simulación, pídele a Dexter que los configure como expresiones.

Definir un tipo de entidad

Los tipos de entidad se administran en el diálogo Entidades. Ábrelo con el lápiz (Ver y gestionar todo) en la sección Entidades de la Vista general del Modelador. El diálogo lista todos los tipos de entidad de la fábrica a la izquierda; selecciona uno para editarlo en el panel de detalle, o haz clic en Nueva entidad para crear uno. Cada tipo tiene:
  • Un nombre y Descripción
  • Una Unidad: una etiqueta de texto libre (predeterminada "EA") que impulsa las etiquetas de cantidad en reportes y KPIs. Es solo una etiqueta: ProDex no realiza conversión dimensional entre unidades.
  • Un conjunto de Atributos tipados (con Opciones en atributos Lista de Texto y Lista de Números, Mín / Máx / Excluir cero y Dominio opcionales en atributos Número, y Longitud máx opcional en Texto)
Los tipos de entidad pertenecen a la fábrica, pero un modelo solo usa los tipos de entidad que le agregas. Agrega uno desde el panel de detalle del diálogo con Agregar al modelo, o desde la fila Agregar entidad al final de la sección Entidades (que también puede crear uno nuevo). El × (Quitar del modelo) de la fila lo saca del modelo sin eliminarlo, y está deshabilitado mientras algo en el modelo siga usándolo. Las Fuentes, Transformadores, nodos de BOM, Combinadores y Separadores que producen entidades de ese tipo comparten las mismas definiciones de atributos: si agregas un atributo al tipo, cada lugar que crea o modifica la entidad ahora puede asignarlo.
Los mismos tipos de entidad respaldan tus BOM. Un tipo de entidad no es exclusivo de la simulación. Un BOM referencia un tipo de entidad, y sus condiciones leen los atributos del tipo por nombre: ambas funciones comparten la lista única de tipos de entidad de la fábrica. Define un tipo de entidad una vez y estará disponible tanto para el modelo de simulación como para el lado de BOM/planificación; edita sus atributos y ambos ven el cambio.
Renombrar un tipo de entidad o un atributo se propaga ampliamente. Los tipos de entidad son referenciados por Fuentes, Transformadores (entidad de entrada y salida), Separadores (entidad de entrada y lote de salida), Combinadores (entidad de salida), liberaciones de material de programación, BOM y Plantillas de Configuración. Los nombres de atributo aparecen en condiciones de BOM y expresiones DSL en todo el modelo. Renombra con una búsqueda global, no de forma aislada.

Crear tipos de entidad con Dexter

Pídele a Dexter que cree o extienda tipos de entidad, por ejemplo a partir de una hoja de cálculo que hayas subido. Perfila los datos y define los tipos de entidad y sus atributos tipados por ti.

Atributos en los datos de resultados

Los atributos son consultables después de una corrida, pero viven en una tabla de dimensión, no en línea en cada fila del ciclo de vida:
  • Cada fila de entity_lifecycle lleva un attributes_hash. Únela a la tabla entity_attribute, que tiene una fila por cada (attributes_hash, attribute_name).
  • Columnas de entity_attribute: attributes_hash, attribute_name, value_type ("number", "text" o "boolean"), y las columnas de valor tipadas value_number / value_text / value_boolean. Los booleanos caen en value_boolean, nunca en value_number; los valores de Lista de Texto caen en value_text y los de Lista de Números en value_number (solo hay tres depósitos de valor).
  • Las filas se escriben la primera vez que se ve cada attributes_hash distinto y nunca se vuelven a emitir; la tabla no lleva identidad de entidad propia: el hash en entity_lifecycle es la única ruta de vuelta a las entidades.
Consulta los dataframes disponibles para el catálogo completo.

Patrones

Atributo de clasificación que impulsa el enrutamiento. Un atributo Lista de Texto product_class asignado en la Fuente (uno de "rush" o "standard") impulsa un Enrutador que envía los ítems urgentes a la línea expres. Atributo numérico que impulsa el tiempo de procesamiento. Un atributo Número complexity_factor (extraído de una distribución mediante la estrategia Distribución) multiplica el tiempo de procesamiento base en cada Proceso. Cambio de tipo en un Transformador. Un Transformador reasigna la entidad a un nuevo tipo painted_part (desde raw_part), con asignaciones explícitas por expresión DSL que transportan cada atributo que le importa al modelo aguas abajo. Agregación en un Combinador. Cuando tres componentes se combinan en un ensamble, el total_weight de la entidad de salida es SUM(weight), priority es MAX(priority), y qc_passed es ALL(qc_passed). El conjunto completo de agregación es SUM, MEAN, COUNT, MAX, MIN, MODE, N_UNIQUE, ANY y ALL: COUNT y N_UNIQUE siempre devuelven números, ANY y ALL son las agregaciones booleanas (sobre atributos booleanos), y MAX / MIN / MODE funcionan sobre números o texto.

Consejos

  • Modela los atributos que vas a consultar. Si te importa “tiempo de ciclo por clase de producto” en tus resultados, product_class tiene que ser un atributo de la entidad, de lo contrario el join no está disponible en los dataframes de simulación.
  • Usa Lista de Texto o Lista de Números para restricciones categóricas. Son enums: la plataforma exige que el valor sea una de las opciones declaradas. Prefiérelas sobre Texto libre cuando el atributo tenga un conjunto finito y conocido de valores válidos.
  • Prefiere los atributos de entidad sobre las variables de estado para datos por entidad. Las variables de estado son para hechos sobre el sistema. Los atributos son para hechos sobre una entidad específica.
  • Para selección categórica dinámica, usa Ponderado con pesos por expresión. Es la única forma de manejar atributos de tipo lista desde expresiones, ya que Expresión DSL no es válida para tipos lista. El editor toma pesos numéricos; pídele a Dexter que configure pesos por expresión.
  • Traspaso explícito de atributos: cada atributo de salida en un Transformador o Separador debe asignarse. No hay copia automática desde la entrada.
  • Revisa la procedencia en los valores de asignación. Las opciones, pesos y expresiones que Dexter escribe llevan la misma marca Datos / Indicado / Asumido que todo lo demás en el panel de Evidencia: los valores asumidos salen a la superficie en una revisión de supuestos.
  • entity_id no sobrevive a la transformación. Los Transformadores, Combinadores y Separadores emiten entidades nuevas con ids nuevos. Si necesitas rastrear una unidad de principio a fin en los resultados, lleva un identificador de negocio estable (número de orden, número de serie) como atributo.