Modelos y Simulación · Tema 20

Supuestos y restricciones

Las decisiones explícitas que sostienen el modelo: qué se da por cierto y hasta dónde vale.

01 · Punto de partida

Todo modelo tiene letra chica

«Aumento constante», «sin tope», «demanda pareja»: cada modelo se sostiene sobre decisiones que se dan por ciertas. Esos supuestos y sus restricciones de validez son parte del modelo tanto como las ecuaciones. El supuesto oculto es el bug más caro: el programa corre y la decisión falla.

  • ¿Qué doy por cierto sin haberlo medido?
  • ¿Hasta qué valores vale este modelo?
  • ¿Qué pasa si el supuesto se rompe?
  • ¿Dónde está escrito para que otros lo critiquen?

02 · Definiciones

Lo que se cree y lo que se limita

∼

Supuesto

Simplificación tomada por cierta: llegadas parejas, tasa constante, sin fallas.

⊘

Restricción

Límite de validez: demanda 0–120, 30 días, sin picos mayores al doble.

⚠

Riesgo

Lo que cuesta si el supuesto falla: quiebres, saturación, decisión invertida.

La letra chica de modelos conocidos.
ModeloSupuestoRestricción
Tanque linealCaudales constantesSin tope ni vaciado en el horizonte
Cola con promedioLlegadas parejasSin ráfagas mayores al doble
Ganancia linealMargen fijoDemanda 0–120
Pronóstico por tendenciaRégimen vigenteHorizonte de 2 pasos

03 · Inventario

Cazar supuestos antes de que cacen

  1. 1
    Listalos en voz alta.

    Todo «obvio» va al papel: lo obvio es donde se esconden.

  2. 2
    Clasificalos por riesgo.

    ¿Qué rompe la decisión si falla? Eso se testea primero.

  3. 3
    Convertí límites en restricciones.

    «Vale hasta demanda 120» es una guarda programable.

  4. 4
    Publicalos con el modelo.

    Supuesto no declarado no existe para quien decide.

Supuesto

Afirma algo del mundo

«La demanda es pareja»: se puede contrastar con datos y romper con evidencia.

Restricción

Acota el uso

«Hasta 120»: fuera de ahí el modelo no responde, y el código debe negarse.

Validez
Rango donde el modelo responde como promete.
Guarda
Chequeo que rechaza escenarios fuera de validez.
Sensibilidad
Prueba de cuánto duele que un supuesto falle.
Documentación
El lugar visible donde viven supuestos y restricciones.

04 · En el código

Supuestos que se leen, restricciones que frenan

Supuesto escrito→Restricción medible→Guarda en código→Error claro

El supuesto vive en comentarios y diccionarios; la restricción, en assert y validaciones que fallan fuerte ante escenarios prohibidos.

05 · En Python

Letra chica ejecutable

Python en tu navegador. Los supuestos se declaran y las restricciones se programan: el modelo se niega fuera de rango.

SUPUESTOS = ["aumento diario constante", "sin tope en el horizonte"]
RESTRICCIONES = {"demanda_min": 0, "demanda_max": 120}


def estimar(demanda):
    # Restricción programada: fuera de rango, error claro.
    if not (0 <= demanda <= 120):
        raise ValueError("demanda fuera de validez 0-120")
    return 100 + 3 * demanda


print(SUPUESTOS)
print(estimar(50))

Romper el supuesto a propósito

def estimar(demanda):
    if not (0 <= demanda <= 120):
        raise ValueError("demanda fuera de validez 0-120")
    return 100 + 3 * demanda


for d in [50, 120, 200]:
    try:
        print(d, estimar(d))
    except ValueError as e:
        print(d, "rechazado:", e)

06 · Exploración

Laboratorio: la validez tiene borde

El modelo lineal promete hasta la demanda marcada (zona válida). La realidad se ameseta en el tope. Pasá la demanda del borde y mirá explotar el error.

EXPERIMENTO 20

Dentro y fuera de validez

lineal válido hasta demanda 120

Los resultados numéricos aparecen debajo.
Predicción340,00
Realidad340,00
Error0,00
EstadoVálido

Con demanda 80, dentro de validez, el error es 0.

La banda marca la zona válida. Fuera de ella el modelo promete y la realidad dispone.

Preguntas para explorar

  1. Llevá la demanda a 200. ¿Cuánto erra el modelo fuera de validez?
  2. Bajá el tope a 300. ¿La zona válida sigue siendo honesta?
  3. ¿Qué guarda programarías para este modelo?
Ver respuestas sugeridas
  1. Predice 700 contra 460 reales: error 240. Fuera de validez, el modelo promete de más.
  2. No necesariamente: si la realidad satura antes, la zona «válida» ya incluye error. Hay que mover la validez o el modelo.
  3. if not (0 <= demanda <= validez): raise ValueError: fallar fuerte antes que responder mal.

07 · Comprensión

Confusiones frecuentes

«Si funciona, los supuestos valen»

Funcionar adentro no prueba nada afuera. La validez se declara antes y se testea en bordes, no se deduce del éxito.

«Documentar supuestos es burocracia»

Es la diferencia entre herramienta y trampa: sin letra chica nadie puede usar el modelo con criterio.

«La guarda molesta al usuario»

Molesta menos que una decisión basada en un número inválido. El error claro es un servicio.

«Restricción es lo mismo que supuesto»

El supuesto afirma («demanda pareja»); la restricción acota («hasta 120»). Uno se contrasta, la otra se programa.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: leer la letra chica

Ejecutá y explicá qué garantiza este modelo y qué no.

SUPUESTOS = ["aumento diario constante", "sin tope en el horizonte"]

def estimar(demanda):
    if not (0 <= demanda <= 120):
        raise ValueError("demanda fuera de validez 0-120")
    return 100 + 3 * demanda


print(estimar(50))
print(SUPUESTOS)
Ver solución razonada

Responde 250 dentro de validez y documenta sus apuestas. Fuera de 0–120 se niega: garantiza no mentir en silencio.

Ejercicio 2: forzar la guarda

Pedí demandas 0, 120 y 121. ¿Qué pasa en el borde?

def estimar(demanda):
    if not (0 <= demanda <= 120):
        raise ValueError("demanda fuera de validez 0-120")
    return 100 + 3 * demanda


for d in [0, 120, 121]:
    try:
        print(d, estimar(d))
    except ValueError as e:
        print(d, "rechazado")
Ver solución

Responde 100 y 460 en los bordes incluidos, y rechaza 121. Los bordes se testean: son el lugar donde viven los bugs.

Ejercicio 3: escribir la letra chica

Documentá supuestos y restricciones de un pronóstico por tendencia a 2 pasos.

Ver una posible respuesta
ficha = {
    "supuestos": ["régimen vigente", "sin quiebres en el horizonte"],
    "restricciones": {"horizonte_max": 2, "ruido_max": 2.0},
}
print(ficha)

La ficha viaja con el modelo: quien la lee sabe cuándo usarlo y cuándo desconfiar. Eso es profesionalismo ejecutable.

09 · Síntesis

Ideas para recordar

  • Supuestos afirman, restricciones acotan: ambos se escriben.
  • La restricción se programa como guarda que falla fuerte.
  • Los bordes se testean: ahí viven los errores caros.
  • Sin letra chica el modelo promete todo y garantiza nada.
  • En Python: dict de supuestos y ValueError fuera de rango.

En el próximo tema ordenaremos el relato: la representación conceptual de un sistema.