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.
| Sistema | Contorno | Regla de borde |
|---|---|---|
| Tanque | tope 40, piso 0 | Recortar: lo que sobra se vierte, bajo cero no se baja |
| Local | horario 9 a 18 | Fuera de horario no hay entradas |
| Sala de espera | capacidad 20 | Lleno: el que llega se va (rechazo) |
| Inventario | stock no negativo | Sin stock: venta perdida y quiebre contado |
03 · Tipos
Cuatro familias de bordes
- 1Físicos.
Los impone la realidad: capacidad, cero absoluto, velocidad máxima. No se negocian.
- 2Temporales.
Ventanas de tiempo: horarios, turnos, fecha de fin de la simulación.
- 3Operativos.
Reglas del negocio: cupos, prioridades, «se atiende hasta las 18».
- 4De 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.
Horario que abre y cierra
12 pasos · salida 2 · tope 40
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
- Con apertura 0 y cierre 12, ¿a qué ejemplo anterior volvés?
- Achicá la ventana a 2 pasos con entrada 6. ¿Alcanza el pico al tope?
- ¿Qué contorno de tu vida (horarios, cupos) modelarías como ventana?
Ver respuestas sugeridas
- Al tanque con entrada constante: ventana siempre abierta, sin contorno temporal.
- No: con 2 pasos activos y entrada 6 el nivel sube unos 8 puntos (de 10 a ~18), lejos del tope 40.
- 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.