Modelos y Simulación · Tema 11

Condiciones de contorno

Límites y reglas del entorno durante la corrida: lo que el sistema no puede cruzar ni ignorar.

01 · Punto de partida

El inicio dice dónde; el contorno dice hasta dónde

Las condiciones iniciales (Tema 10) fijan el arranque. Pero durante la corrida el entorno impone paredes: el tanque tiene tope, el local tiene horario, la sala tiene capacidad, el día termina. Esas reglas de borde son las condiciones de contorno.

  • ¿Qué valores están prohibidos durante la corrida?
  • ¿Qué pasa al llegar al borde: se frena, se pierde o se rechaza?
  • ¿El entorno abre y cierra, y cuándo?
  • ¿El borde es físico, operativo o de política?

02 · Definición

Bordes, reglas y entorno

‖

Borde

Dónde actúa la regla: capacidad del tanque, puertas del local, fin del día.

§

Regla

Qué ocurre en el borde: recortar, rechazar, acumular espera o cerrar.

◍

Entorno

Quién la impone: física, horario comercial o política de la empresa.

Contornos típicos y su regla.
SistemaContornoRegla de borde
Tanquetope 40, piso 0Recortar: lo que sobra se vierte, bajo cero no se baja
Localhorario 9 a 18Fuera de horario no hay entradas
Sala de esperacapacidad 20Lleno: el que llega se va (rechazo)
Inventariostock no negativoSin stock: venta perdida y quiebre contado

03 · Tipos

Cuatro familias de bordes

  1. 1
    Físicos.

    Los impone la realidad: capacidad, cero absoluto, velocidad máxima. No se negocian.

  2. 2
    Temporales.

    Ventanas de tiempo: horarios, turnos, fecha de fin de la simulación.

  3. 3
    Operativos.

    Reglas del negocio: cupos, prioridades, «se atiende hasta las 18».

  4. 4
    De escenario.

    Límites del experimento: 12 pasos, demanda máxima ensayada.

Condición inicial

Vale en t = 0

Un valor de arranque: nivel 10. Se declara una vez y la historia la arrastra u olvida.

Condición de contorno

Vale en cada paso

Una regla permanente: tope 40, horario 9–18. Actúa siempre que el sistema toca el borde.

04 · En el código

Paredes con nombre propio

Recorte (clamp)
min(max(nivel, 0), TOPE): lo de adentro evoluciona, el borde recorta.
Guarda (guard)
if lleno: rechazar: política explícita ante el borde.
Ventana
Función de apertura: abierto(t) dice si el entorno deja entrar.
Contador de borde
Registra toques: vertidos, rechazos, quiebres. El borde también se mide.

05 · En Python

Paredes y horarios en la transición

Python en tu navegador. El contorno vive dentro del bucle: cada paso pregunta por el borde antes de avanzar.

TOPE = 20  # contorno físico: capacidad del tanque


def tanque_con_contorno(n0, entradas, salida, abierto):
    # abierto(t): contorno temporal, dice si entra caudal en t.
    n = n0
    historia = []
    for t, e in enumerate(entradas):
        e = e if abierto(t) else 0
        n = min(max(n + e - salida, 0), TOPE)
        historia.append(n)
    return historia


print(tanque_con_contorno(10, [3] * 6, 2, lambda t: 1 <= t <= 4))

Contar los toques del borde

Un buen modelo no solo respeta el borde: lo registra. Vertidos y rechazos son salidas tan importantes como el nivel.

def con_vertidos(n0, entradas, salida, tope):
    n = n0
    historia, vertidos = [], 0
    for e in entradas:
        n = n + e - salida
        if n > tope:
            vertidos = vertidos + (n - tope)
            n = tope
        n = max(n, 0)
        historia.append(n)
    return historia, vertidos


print(con_vertidos(18, [5, 5, 5], 2, 20))

06 · Exploración

Laboratorio: ventana de atención

El caudal solo entra dentro de la ventana entre apertura y cierre (banda sombreada). Fuera de ella, el tanque solo pierde. Movete la ventana y la entrada.

EXPERIMENTO 11

Horario que abre y cierra

12 pasos · salida 2 · tope 40

Los resultados numéricos aparecen debajo.
Pasos activos6
Nivel final10,00
Pico18,00
LecturaPulso

Con ventana de 6 pasos, el nivel sube y luego cae.

La banda marca la ventana abierta. El nivel solo puede subir ahí; el resto del tiempo, el contorno temporal manda.

Preguntas para explorar

  1. Con apertura 0 y cierre 12, ¿a qué ejemplo anterior volvés?
  2. Achicá la ventana a 2 pasos con entrada 6. ¿Alcanza el pico al tope?
  3. ¿Qué contorno de tu vida (horarios, cupos) modelarías como ventana?
Ver respuestas sugeridas
  1. Al tanque con entrada constante: ventana siempre abierta, sin contorno temporal.
  2. No: con 2 pasos activos y entrada 6 el nivel sube unos 8 puntos (de 10 a ~18), lejos del tope 40.
  3. Respuesta abierta: horarios de cursada, turnos de trabajo, cupos. Todo borde temporal es una ventana.

07 · Comprensión

Confusiones frecuentes

«El tope es decoración»

Sin tope, el modelo crece hasta el infinito y ninguna decisión de capacidad tiene sentido. El contorno es parte del modelo.

«Fuera de horario no pasa nada»

Claro que pasa: el sistema sigue perdiendo, venciendo o esperando. El contorno temporal cambia entradas, no congela el tiempo.

«El rechazo no se cuenta»

Todo borde que rechaza debe contar: clientes perdidos, agua vertida, ventas no hechas. Lo no contado no se gestiona.

«Inicial y contorno dan igual»

El inicio actúa una vez; el contorno, en cada paso. Cambiar el tope reescribe toda la historia; cambiar n0 solo la desplaza.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: leer la ventana

Ejecutá y explicá paso a paso por qué la historia no es monótona.

TOPE = 20


def tanque_con_contorno(n0, entradas, salida, abierto):
    n = n0
    historia = []
    for t, e in enumerate(entradas):
        e = e if abierto(t) else 0
        n = min(max(n + e - salida, 0), TOPE)
        historia.append(n)
    return historia


print(tanque_con_contorno(10, [3] * 6, 2, lambda t: 1 <= t <= 4))
Ver solución razonada

Da [8, 9, 10, 11, 12, 10]: en t = 0 y t = 5 la ventana está cerrada y el nivel cae; entre t = 1 y 4 sube de a 1. El contorno temporal dibuja el pulso.

Ejercicio 2: el borde que avisa

¿Cuánto se vertió con inicio 18, entradas 5 y tope 20 en 3 pasos con salida 2?

def con_vertidos(n0, entradas, salida, tope):
    n = n0
    historia, vertidos = [], 0
    for e in entradas:
        n = n + e - salida
        if n > tope:
            vertidos = vertidos + (n - tope)
            n = tope
        historia.append(max(n, 0))
    return historia, vertidos


print(con_vertidos(18, [5, 5, 5], 2, 20))
Ver solución

Historia [20, 20, 20] y vertidos 7: el nivel no lo cuenta, pero el borde sí. Sin ese contador, el modelo escondería el desperdicio.

Ejercicio 3: diseñar un contorno

Una sala acepta 20 personas: el que llega lleno se va. Modelá 6 pasos con llegadas [8, 8, 8, 2, 2, 2], atención 5 y contá rechazados.

Ver una posible respuesta
def sala(llegadas, atencion, capacidad):
    dentro, rechazados = 0, 0
    for l in llegadas:
        if dentro + l > capacidad:
            rechazados = rechazados + (dentro + l - capacidad)
            dentro = capacidad
        else:
            dentro = dentro + l
        dentro = max(dentro - atencion, 0)
    return dentro, rechazados


print(sala([8, 8, 8, 2, 2, 2], 5, 20))

Termina con (0, 0): con estos números la sala absorbe todo. Subí las llegadas a 12 y verás aparecer rechazados: el contorno solo habla bajo presión.

09 · Síntesis

Ideas para recordar

  • El contorno rige en cada paso; el inicio, una sola vez.
  • Todo borde define qué pasa al tocarlo: recorte, rechazo o espera.
  • Los bordes que rechazan deben contar (vertidos, rechazos, quiebres).
  • En código: constantes nombradas, guardas explícitas y ventanas como funciones.
  • Sin contorno no hay capacidad, horario ni validez que decidir.

En el próximo tema entra el azar: modelos determinísticos y estocásticos.