Modelos y Simulación · Tema 02

Concepto de modelo

Qué es un modelo, qué recorta de la realidad y cómo escribirlo en Python para poder razonar y experimentar sin tocar el sistema real.

01 · Punto de partida

Del sistema al modelo

En el Tema 1 delimitamos el sistema: sus componentes, su frontera y su entorno. Pero experimentar sobre el sistema real suele ser caro, lento o peligroso: no podemos frenar una ciudad para probar semáforos ni saturar un servidor real para ver cuándo se cae.

La salida es construir un modelo: una representación simplificada del sistema que conserva lo esencial para una pregunta concreta y descarta el resto.

  • ¿Qué pregunta debe responder el modelo?
  • ¿Qué parte del sistema conservamos y cuál descartamos?
  • ¿Con qué datos lo alimentamos?
  • ¿Cuándo deja de ser válido?

02 · Definición

¿Qué es un modelo?

Todo modelo tiene tres ingredientes inseparables:

◐

Simplifica

Elimina detalle irrelevante. Un mapa no reproduce cada árbol: conserva calles y distancias útiles para viajar.

◑

Representa

Conserva la estructura que importa: componentes, relaciones y reglas de cambio del sistema original.

◎

Sirve a un propósito

Responde una pregunta: cuánto esperar, cuánto stock pedir, qué nivel alcanzará el tanque.

El mismo sistema admite muchos modelos. Una fila de banco puede modelarse con un promedio en una planilla, con una fórmula de teoría de colas o con un programa que simula cada cliente. Ninguno es «el verdadero»: cada uno sirve a una pregunta distinta con un costo distinto.

Distintas representaciones del mismo sistema.
RepresentaciónEjemploCuándo conviene
Mental / verbal«Si llueve, la espera crece»Para razonar rápido y comunicar.
DiagramaBloques de fila, cajeros y salidasPara ordenar componentes y flujos.
Matemáticausuarios(d) = 800 + 45dPara calcular y comparar con precisión.
ComputacionalFunción Python que actualiza el nivelPara experimentar con muchos casos.

03 · Anatomía

Elementos de un modelo

Aunque los desarrollaremos en los próximos temas, conviene ver el mapa completo desde ahora:

Variables
Magnitudes que cambian dentro del modelo: nivel, espera, stock. (Tema 7)
Parámetros
Valores que configuran el comportamiento: caudal, tasa, capacidad. (Tema 7)
Supuestos
Decisiones de simplificación declaradas: «llegadas constantes», «sin fallas». (Tema 20)
Validez
Rango donde el modelo responde bien y fuera del cual no debe usarse. (Temas 35–36)

Modelo útil

Simple y honesto

Declara sus supuestos, responde la pregunta con datos disponibles y avisa dónde deja de valer.

Modelo perfecto inútil

Detallado e inusable

Quiere reproducir todo, pide datos imposibles y nadie puede interpretar ni mantener.

04 · Mapa del curso

Una primera mirada a los tipos de modelos

Los tipos se estudiarán a fondo en los Temas 12 a 18. Por ahora, alcanzan tres distinciones para ubicarse:

¿Hay azar?→¿Cambia en el tiempo?→¿El cambio es por pasos o continuo?
  1. 1
    Determinístico o estocástico.

    Sin azar (misma entrada, misma salida) o con azar (llegadas aleatorias, fallas).

  2. 2
    Estático o dinámico.

    Una foto (costo de hoy) o una película (nivel durante 12 pasos).

  3. 3
    Discreto, continuo o híbrido.

    Por eventos (clientes), por flujos (litros) o mezclando ambos.

05 · Representación en Python

Un modelo es una función con supuestos

En Python, un modelo suele ser una función: recibe el estado y los parámetros, aplica las reglas y devuelve el resultado. Los supuestos van en comentarios o en un diccionario, nunca solo en la cabeza del programador.

Python en tu navegador. Estos bloques se ejecutan localmente con Pyodide, sin instalar nada. Podés editar los parámetros y volver a ejecutar para ver cómo responde el modelo.

def modelo_lineal(usuarios_iniciales, aumento_diario, dias):
    # Supuesto: el aumento diario se mantiene constante.
    return usuarios_iniciales + aumento_diario * dias


for d in [0, 6, 30]:
    print(d, modelo_lineal(800, 45, d))

Probá cambiar el aumento a 20 o los días a 365: el programa responde igual, pero ¿sigue siendo válido el supuesto?

Agregar un límite del mundo real

Ningún tanque es infinito y ningún público es ilimitado. Un tope convierte el modelo lineal en un modelo con saturación, mucho más creíble:

def modelo_con_tope(nivel, entrada, salida, tope, pasos):
    # Supuestos: flujos constantes por paso y nivel entre 0 y tope.
    historia = []
    for t in range(pasos):
        nivel = nivel + entrada - salida
        if nivel < 0:
            nivel = 0
        if nivel > tope:
            nivel = tope
        historia.append(nivel)
    return historia


print(modelo_con_tope(10, 3, 2, 14, 6))

06 · Exploración

Laboratorio: lineal frente a modelo con tope

Compará el modelo lineal sin límites con el modelo con tope. Ambos comparten parámetros; solo cambia la regla de saturación. ¿Cuándo coinciden y cuándo se separan?

EXPERIMENTO 02

El mismo sistema, dos modelos

lineal vs. con tope

Los resultados numéricos aparecen debajo.
Final lineal (12 pasos)22,00
Final con tope14,00
Diferencia8,00
LecturaEl tope recorta

Con balance +1, el lineal llega a 22 y el modelo con tope se queda en 14.

La curva lima es el modelo lineal sin límites; la curva naranja es el mismo modelo con tope. La línea punteada marca la capacidad máxima.

Preguntas para explorar

  1. Con balance 0, ¿coinciden ambos modelos? ¿Por qué?
  2. Con balance negativo e inicial 10, ¿cuándo se separan las curvas?
  3. Si el tope real fuera 20 pero modelás con 14, ¿el error es del sistema o del modelo?
Ver respuestas sugeridas
  1. Sí, siempre que el tope no actúe: con balance 0 el nivel queda constante por debajo del tope y la regla extra nunca se dispara.
  2. En el primer paso donde alguna curva toca el tope (o el piso). Antes de eso son idénticas.
  3. Del modelo: el sistema real tiene su tope verdadero; elegir 14 fue tu decisión de representación (un supuesto).

07 · Comprensión

Confusiones frecuentes

«El modelo es la realidad»

El modelo representa algunos aspectos del sistema para una pregunta. Confundirlo con la realidad lleva a exigirle respuestas que nunca prometió.

«Más detalle siempre es mejor»

Cada detalle agrega parámetros, datos y fuentes de error. El mejor modelo es el más simple que responde la pregunta con la precisión requerida.

«Si el código corre, el modelo es correcto»

Que el programa ejecute solo prueba que no hay errores de sintaxis. La corrección del modelo se discute con supuestos, datos y comparación con el sistema.

«Un modelo calibrado es un modelo verdadero»

Calibrar ajusta parámetros para parecerse a datos pasados. La validez futura depende de que los supuestos sigan cumpliéndose.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: explicitar el modelo

Ejecutá este modelo empaquetado como datos + función. Luego cambiá el supuesto del aumento y observá el efecto.

modelo = {
    "nombre": "Usuarios de una app",
    "supuesto": "aumento diario constante",
    "parametros": {"inicial": 800, "aumento": 45},
}

def estimar(parametros, dias):
    return parametros["inicial"] + parametros["aumento"] * dias


print(modelo["supuesto"])
print(estimar(modelo["parametros"], 6))
Ver solución razonada

El modelo responde 1070 para 6 días. El supuesto queda escrito dentro del diccionario: si el aumento deja de ser constante (fines de semana, saturación), hay que cambiar el modelo, no solo los números.

Ejercicio 2: comparar dos modelos

Sin ejecutar primero: con nivel 10, entrada 2, salida 2, tope 12 y 3 pasos, ¿qué devuelve cada modelo? Comprobalo después.

def lineal(nivel, balance, pasos):
    return [nivel + balance * (t + 1) for t in range(pasos)]

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


print(lineal(10, 0, 3))
print(con_tope(10, 2, 2, 12, 3))
Ver solución

Ambos devuelven [10, 10, 10]: con balance cero y nivel por debajo del tope, los modelos coinciden. La diferencia solo aparece cuando el tope actúa.

Ejercicio 3: romper el supuesto

El modelo lineal predice 2150 usuarios a los 30 días con aumento 45. Si el público máximo posible es 1500, ¿qué falla: el cálculo o el modelo? Ajustá el código con un tope.

Ver una posible respuesta
def estimar_con_tope(inicial, aumento, dias, tope):
    valor = inicial + aumento * dias
    if valor > tope:
        valor = tope
    return valor


print(estimar_con_tope(800, 45, 30, 1500))

El cálculo 800 + 45 * 30 = 2150 es correcto, pero el modelo es inválido fuera de su rango. Con tope 1500, la respuesta pasa a 1500: falla el modelo, no la aritmética.

09 · Síntesis

Ideas para recordar

  • Un modelo simplifica, representa y sirve a un propósito explícito.
  • El mismo sistema admite varios modelos con distinto costo y precisión.
  • Variables, parámetros, supuestos y validez son los elementos de todo modelo.
  • En Python, un modelo es una función con parámetros y supuestos escritos.
  • Un modelo sin rango de validez declarado es una herramienta peligrosa.

En el próximo tema estudiaremos el concepto de simulación: cómo experimentar con el modelo en lugar del sistema real.