Visión general
Las Constantes (Constants) y las Tablas de búsqueda (Lookup Tables) son la forma en que separas los parámetros de un modelo de su lógica. En lugar de codificar valores dentro de las expresiones, los nombras, los almacenas en un solo lugar y los referencias desde cualquier parte. Cambia el valor nombrado una vez, y cada expresión que lo referencia se actualiza automáticamente. Esto importa por tres razones:- Ajuste: modifica los parámetros del modelo sin cazar a través de expresiones. Cambia
BASE_PROCESSING_TIMEde 60 a 75 y cada componente relevante lo sigue. - Legibilidad:
SHIFT_EFFICIENCY_FACTORes más fácil de entender que0.87esparcido por las expresiones. - Acceso no técnico: los operadores y analistas que no deberían modificar expresiones aún pueden afinar el modelo cambiando los valores de las constantes.
Constantes
Una Constante es un valor nombrado con un tipo específico:number, text o boolean. Cada constante tiene:
- Name: cómo la referencian las expresiones. Los nombres usan SCREAMING_SNAKE_CASE (por ejemplo,
BASE_CYCLE_TIME) - Description: qué representa y en qué unidades
- Type:
number,textoboolean - Value: los datos reales
Los nombres se convierten automáticamente a mayúsculas mientras escribes. El campo de nombre convierte lo que escribes a SCREAMING_SNAKE_CASE: escribir
base rate se guarda como BASE_RATE. Las letras se convierten a mayúsculas y los espacios se vuelven guiones bajos. Referencia el nombre tal como queda después de la conversión.SIM_TIME o el nombre de una función), y las constantes y las tablas de búsqueda no pueden compartir un nombre entre sí. Cualquiera de los dos conflictos falla la validación (por ejemplo, “Constant ‘SIM_TIME’ collides with reserved identifier.”). Las variables de estado tampoco pueden reutilizar el nombre de una constante o tabla de búsqueda.
Referencia una constante por su nombre en cualquier expresión:
Constantes vs. variables de estado
Las Constantes son estáticas durante la duración de una ejecución (Run): no pueden ser reasignadas. Para mutar un valor durante la simulación, usa una Variable de estado en su lugar. Las variables de estado exponen una acciónassign en tiempo de ejecución que las constantes no tienen.
El alcance también difiere: las constantes están limitadas a la fábrica y se comparten entre todos los modelos que optan por participar, mientras que las variables de estado están limitadas al modelo. Una constante es la herramienta correcta para un parámetro que afinas entre ejecuciones o compartes entre modelos. Una variable de estado es la herramienta correcta para un valor que la simulación misma cambia: turno actual, contador móvil de WIP, señal de demanda.
Cuándo usar una constante
- Cualquier valor que aparezca en múltiples lugares. Si te encuentras escribiendo
0.87en varias expresiones, extráelo a una constante. - Cualquier valor que podrías querer cambiar entre ejecuciones. Edita la constante, ejecuta de nuevo y compara las ejecuciones.
- Cualquier valor que un interesado no técnico pueda necesitar ajustar. Los analistas pueden afinar una constante sin conocer el lenguaje de expresiones.
Las constantes tienen alcance de fábrica. Cambiar una la cambia para cada modelo que la usa, incluidas las copias de un modelo. Para comparar valores, ejecuta con un valor, cámbialo, ejecuta de nuevo y compara las dos ejecuciones.
Gestión de constantes
Las constantes aparecen en la sección Constantes (Constants) del panel izquierdo del Modelador, en la vista Vista general (Overview). Cada fila muestra una constante que usa el modelo y su valor.- + Agregar Constante al final de la sección añade una constante existente de la fábrica a este modelo, o elige Crear nuevo… para definir una y añadirla en un solo paso.
- El × de una fila quita la constante de este modelo sin eliminarla. Está deshabilitado mientras el modelo siga referenciando la constante (“En uso: quita sus referencias primero”).
- El icono de lápiz de la sección (Ver y gestionar todo) abre el diálogo Búsquedas (Lookups) en su pestaña Constantes, que lista cada constante de la fábrica. Añade, edita o elimina constantes ahí, y usa la casilla En Modelo para añadir o quitar una del modelo actual. El mismo diálogo también tiene las pestañas Tablas de Búsqueda, Variables de Estado y Temas.
Tablas de búsqueda
Una Tabla de búsqueda (Lookup Table) es una tabla nombrada con claves tipadas, consultable en expresiones. Cada tabla tiene un tipo de valor (number, text o boolean) y una o más claves (llamadas “Attributes” en la UI: estas son las columnas clave de la tabla, sin relación con los atributos de entidad). Las claves mismas están tipadas (cada una puede ser boolean, text o number), por lo que una búsqueda multidimensional puede mezclar tipos de clave.
Consulta una tabla con LOOKUP:
Proporcionar un valor de respaldo
LOOKUP acepta un argumento de palabra clave opcional default:= que retorna el valor proporcionado cuando ninguna fila coincide:
default:= sobre envolver en IF(): es una sola expresión sin doble evaluación de la misma búsqueda.
Sin
default:=, las filas faltantes retornan el cero específico de tipo: 0 para una tabla numérica, "" (cadena vacía) para una tabla de texto, FALSE para una tabla booleana. Ese cero es silencioso y fácilmente confundido con un resultado real. Usa default:= siempre que la diferencia entre “ninguna fila coincidió” y “el valor es exactamente cero” importe.:=, no = (que significa igualdad en el DSL). A pesar del parecido visual con el operador morsa de Python, := aquí es simplemente un marcador de argumento nombrado, no una asignación. El mismo := marca los argumentos de palabra clave filter:= y type:= en las funciones de agregación y ndigits:= en ROUND.
Búsquedas multidimensionales
Una Tabla de búsqueda puede configurarse con más de una columna clave, por lo que una sola tabla puede capturar datos que varían a través de dos o más ejes a la vez, como “tiempo de procesamiento por (tipo de producto, estación)” o “tasa de rendimiento por (turno, clase de material)”. Consúltala con un argumento posicional por columna clave, en el orden en que la tabla las define:LOOKUP con múltiples claves coinciden con las filas donde todas las columnas clave igualan los valores que pasas.
Un argumento por columna clave. No hay sintaxis comodín ni de coincidencia parcial: siempre pasa exactamente tantas claves como define la tabla.
Claves compuestas mediante CONCAT. Cuando una clave natural es una cadena compuesta, constrúyela en la expresión en lugar de añadir una columna por fragmento:
Gestión de tablas de búsqueda
Las tablas de búsqueda aparecen en la sección Tablas de búsqueda (Lookup tables) de la vista Vista general, justo debajo de Constantes, y funcionan de la misma manera: + Agregar Tabla de Búsqueda añade una tabla existente de la fábrica a este modelo (Crear nuevo… abre el diálogo para definir una), el × de una fila la quita de este modelo, y el icono de lápiz abre el diálogo Búsquedas en su pestaña Tablas de Búsqueda. En el diálogo, cada tabla tiene:- Un Name (Nombre) (SCREAMING_SNAKE_CASE, convertido mientras escribes, igual que los nombres de constantes)
- Un Value Type (Tipo de Valor): Number, Text o Boolean
- Uno o más Attributes (Atributos): las columnas clave tipadas, cada una con un nombre, un tipo y sus valores posibles
- Entries (Entradas): una fila por cada combinación de valores de clave, cada una con su valor
Cuándo usar una tabla de búsqueda
- Valores que varían según un atributo categórico. Tiempo de procesamiento por tipo de producto, tasa de rendimiento por material, peso de prioridad por nivel de cliente: todas búsquedas naturales.
- Enrutamiento y divisiones proporcionales. Diferentes entidades se enrutan de manera diferente; almacena las reglas de enrutamiento en una tabla en lugar de expresiones
IFprofundamente anidadas. - Configuración basada en datos. Cuando la “configuración” de un modelo es en realidad un conjunto de números ligados a categorías, una tabla de búsqueda es más clara que codificar la misma información a través de muchos campos.
Constantes vs. tablas de búsqueda: ¿cuál usar?
- Valor único usado en muchos lugares → Constante
- Valor que depende de un atributo categórico → Tabla de búsqueda
- Necesita variar entre ejecuciones de comparación → Constante (un valor por ejecución)
- Conjunto de datos de referencia grande → Tabla de búsqueda
Patrones
Tiempo de procesamiento por producto:Consejos
- La aritmética del DSL es estricta en tipos. Los números se suman a números; el texto no se convierte silenciosamente. Detecta los desajustes de tipo en la validación en lugar de depender de conversiones silenciosas.
- El tipo de valor debe coincidir con el contexto que lo lee. Una constante
booleanen una expresión numérica, o un valor de búsquedatextalimentando una ranura numérica, falla la validación con un error de tipo: un punto de tropiezo común después de refactorizar una tabla de números a valores de texto. - Usa
default:=defensivamente. Si una fila de búsqueda faltante debería ser cualquier cosa diferente del cero del tipo,default:=es más corto y claro que un envoltorioIF()alrededor de dos llamadas aLOOKUP. - Cada modelo opta por participar. Crear una constante o tabla de búsqueda a nivel de fábrica es el primer paso. Añadirla al modelo (desde la sección Vista general o la casilla En Modelo del diálogo) decide si ese modelo la ve.