Modelos y Simulación · Tema 01

Concepto de sistema

Qué es un sistema, cómo delimitarlo (componentes, frontera y entorno) y cómo representarlo en Python antes de modelarlo y simularlo.

01 · Punto de partida

Todo modelo empieza por un sistema

Antes de escribir una ecuación o un programa, hay una pregunta previa: ¿cuál es el sistema que queremos estudiar? Una fila de banco, el tránsito de una avenida, el inventario de un negocio, un servidor web o la propagación de un virus son sistemas: conjuntos de elementos que interactúan para un propósito o comportamiento observable.

Delimitar bien el sistema es la mitad del trabajo de simulación. Si la frontera está mal trazada, el modelo responde una pregunta distinta de la que nos interesa.

  • ¿Qué partes forman el sistema y qué queda afuera?
  • ¿Qué entra al sistema y qué sale de él?
  • ¿Durante cuánto tiempo lo observamos?
  • ¿Qué detalle necesitamos y cuál podemos ignorar?

02 · Definición

¿Qué es un sistema?

Un sistema se describe con cuatro elementos mínimos:

◈

Componentes

Las partes que lo forman: personas, máquinas, programas, depósitos, variables. Ejemplo: cajeros, clientes y fila.

⇄

Relaciones

Cómo se conectan e influyen entre sí: un cliente pasa de la fila al cajero, el stock baja con cada venta.

▣

Frontera y entorno

La línea que separa lo que estudiamos de lo que damos por contexto: horarios, clima, mercado, red.

El cuarto elemento es el comportamiento: lo que el sistema hace en el tiempo (atiende, acumula, transporta, contagia). Ese comportamiento es lo que luego intentaremos reproducir con un modelo.

Un mismo fenómeno puede recortarse como sistemas distintos.
SistemaComponentesFrontera posible
Fila de un bancoClientes, fila, cajerosUna sucursal, de 9 a 13 h
Servidor webPedidos, cola, workers, base de datosUn servicio, durante una hora pico
InventarioStock, compras, ventasUn producto, durante un mes
TránsitoVehículos, semáforos, callesUn cruce, en hora pico

03 · Frontera y entorno

Límites, entradas y salidas

Trazar la frontera es decidir qué incluimos y qué tratamos como dato externo. Todo lo que cruza la frontera hacia adentro es una entrada; todo lo que sale es una salida.

Sistema abierto

Intercambia con el entorno

La mayoría de los sistemas reales: entran clientes, pedidos o materia prima, y salen atenciones, respuestas o productos.

Sistema cerrado

Útil como simplificación

Se estudia aislado del entorno durante un rato: un tanque sin recarga, una simulación con población fija.

Entrada
Estímulo o recurso que llega desde el entorno: llegadas, pedidos, lluvia, inversión.
Salida
Resultado observable: tiempos de espera, respuestas, nivel de stock, casos.
Entorno
Todo lo que afecta al sistema pero no controlamos dentro de la frontera.
Frontera
Recorte explícito: qué período, qué lugar y qué componentes abarca el estudio.

04 · Ejemplos

Sistemas que un programador puede simular

La misma idea de sistema aparece en dominios muy distintos. Reconocer el patrón entrada → sistema → salida permite reutilizar técnicas:

Entradas→Componentes + relaciones→Salidas
  1. 1
    Cola de atención.

    Entradas: llegadas. Sistema: fila y servidores. Salidas: espera promedio y atención total.

  2. 2
    Servidor web.

    Entradas: solicitudes por segundo. Sistema: cola y workers. Salidas: latencia y errores.

  3. 3
    Inventario.

    Entradas: compras. Sistema: stock. Salidas: ventas, faltantes y costo.

  4. 4
    Tanque con flujos.

    Entradas: caudal de entrada. Sistema: nivel acumulado. Salidas: caudal de salida y nivel.

  5. 5
    Contagio simple.

    Entradas: contactos. Sistema: población susceptible e infectada. Salidas: casos por día.

05 · Representación en Python

Describir un sistema con datos

En Python, un primer paso natural es representar el sistema como datos: nombre, componentes, entradas, salidas y frontera. Todavía no simulamos; solo dejamos por escrito el recorte.

Python en tu navegador. Los bloques de esta página se ejecutan localmente con Pyodide, sin instalar nada. La primera ejecución tarda unos segundos mientras se descarga el intérprete; las siguientes son inmediatas. Podés editar el código y volver a ejecutarlo.

sistema_cola = {
    "nombre": "Fila de un banco",
    "componentes": ["clientes", "fila", "cajeros"],
    "entradas": ["llegada de clientes"],
    "salidas": ["clientes atendidos", "espera promedio"],
    "frontera": "una sucursal, de 9 a 13 h",
}

for clave, valor in sistema_cola.items():
    print(clave, ":", valor)

Consejo: cambiá la frontera (por ejemplo, el horario) y observá que el sistema descripto ya no es el mismo.

Del recorte a la dinámica

Un sistema con acumulación se puede describir con una regla de actualización: el nivel de hoy es el nivel de ayer más lo que entró menos lo que salió. Esta función será la base de nuestras primeras simulaciones:

def simular_tanque(nivel_inicial, entrada, salida, pasos):
    nivel = nivel_inicial
    historia = []
    for t in range(pasos):
        nivel = nivel + entrada - salida
        if nivel < 0:
            nivel = 0
        historia.append(nivel)
    return historia


print(simular_tanque(10, 3, 2, 6))

06 · Exploración

Laboratorio: el nivel de un tanque

Movete los controles y observá el sistema más simple con memoria: un tanque con un caudal de entrada, un caudal de salida y un nivel que acumula la diferencia. Es el mismo patrón de un inventario, una cola o una batería.

EXPERIMENTO 01

Tanque: entradas, salidas y nivel

nivel(t+1) = nivel(t) + entrada − salida

Los resultados numéricos aparecen debajo.
Nivel inicial10,00
Balance por paso+1,00
Nivel final (12 pasos)22,00
EstadoCrece

Con entrada 3 y salida 2, el nivel sube 1 por paso.

La línea muestra el nivel acumulado paso a paso. Si la entrada supera a la salida, el sistema acumula; si es menor, se vacía hasta llegar a cero.

Preguntas para explorar

  1. Igualá entrada y salida. ¿Qué le pasa al nivel? ¿Cómo llamarías a ese estado?
  2. Poné la salida mayor que la entrada con nivel inicial 10. ¿En cuántos pasos se vacía?
  3. ¿Qué parte del dibujo es el sistema y qué parte es el entorno?
Ver respuestas sugeridas
  1. El nivel queda fijo: entra lo mismo que sale (balance 0). Es un estado de equilibrio.
  2. Depende de la diferencia: con entrada 3 y salida 4, el nivel baja 1 por paso y se vacía en 10 pasos. Probá otros valores.
  3. El sistema es el tanque con sus caudales y su nivel. El entorno es lo que provee y recibe el agua, fuera del dibujo; los controles son el escenario que vos fijás.

07 · Comprensión

Confusiones frecuentes

«El sistema es el programa»

No: el sistema es el fenómeno real o recortado (la fila, el servidor, el tanque). El programa será, más adelante, el modelo o la simulación de ese sistema.

«Todo lo que influye debe estar dentro»

Si incluimos todo, el sistema se vuelve inmanejable. Lo que no controlamos ni detallamos va al entorno y entra como entrada o supuesto.

«La frontera es obvia y no hace falta escribirla»

La frontera nunca es obvia: período, lugar y componentes incluidos cambian las conclusiones. Siempre se escribe.

«Más componentes significan mejor estudio»

Más detalle implica más datos, más parámetros y más errores posibles. El recorte debe responder a la pregunta, no a la ambición.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: delimitar el sistema

Completá el diccionario para el sistema «servidor web en hora pico» y ejecutalo. Luego cambiá la frontera y razoná qué cambia.

servidor = {
    "nombre": "Servidor web en hora pico",
    "componentes": ["solicitudes", "cola", "workers"],
    "entradas": ["solicitudes por segundo"],
    "salidas": ["latencia promedio", "errores"],
    "frontera": "un servicio, 19 a 20 h",
}

print("Componentes:", len(servidor["componentes"]))
print("Frontera:", servidor["frontera"])
Ver solución razonada

El sistema tiene 3 componentes y una frontera de una hora. Si ampliamos la frontera a todo el día, las entradas cambian de ritmo y el sistema ya es otro: habría que incluir turnos, caches fríos y tareas nocturnas.

Ejercicio 2: predecir el nivel

Sin ejecutar primero: si el tanque empieza en 5, entran 4 y salen 4 durante 3 pasos, ¿qué niveles esperás? Después comprobalo con código.

def simular_tanque(nivel_inicial, entrada, salida, pasos):
    nivel = nivel_inicial
    historia = []
    for t in range(pasos):
        nivel = nivel + entrada - salida
        if nivel < 0:
            nivel = 0
        historia.append(nivel)
    return historia


print(simular_tanque(5, 4, 4, 3))
Ver solución

El balance es 0, así que el nivel queda fijo: [5, 5, 5]. Es un sistema en equilibrio: las entradas compensan exactamente las salidas.

Ejercicio 3: detectar el vaciado

Escribí una función que devuelva en qué paso el tanque llega a cero (o None si nunca se vacía en esos pasos). Probala con nivel 6, entrada 1, salida 3 y 5 pasos.

Ver una posible respuesta
def paso_de_vaciado(nivel_inicial, entrada, salida, pasos):
    nivel = nivel_inicial
    for t in range(1, pasos + 1):
        nivel = nivel + entrada - salida
        if nivel <= 0:
            return t
    return None


print(paso_de_vaciado(6, 1, 3, 5))

El nivel pasa por 4, 2, 0: se vacía en el paso 3. Notá que el sistema no puede bajar de cero: la frontera física impone un límite, idea que retomaremos con condiciones de contorno.

09 · Síntesis

Ideas para recordar

  • Un sistema combina componentes, relaciones, frontera, entorno, entradas, salidas y comportamiento.
  • La frontera es una decisión explícita: define qué estudiamos y qué tratamos como contexto.
  • El mismo fenómeno admite varios recortes; cada recorte es un sistema distinto.
  • En Python, un sistema se puede empezar describiendo con diccionarios y funciones de actualización.
  • Un tanque con entrada y salida es el arquetipo de sistema con memoria: acumula la diferencia.

En el próximo tema estudiaremos el concepto de modelo: cómo representar ese sistema de forma simplificada para poder razonar y, después, simular.