Método de Monte Carlo · Tema 30

Diseño de experimentos Monte Carlo

Qué variar, cuánto simular y en qué orden: el plano antes de gastar N.

01 · Punto de partida

Simular sin plano es quemar N

¿Qué Q probar? ¿Con qué N cada uno? ¿Con qué semillas? ¿En qué orden? Sin diseño, se corre de más donde no importa y de menos donde decide. El diseño fija objetivo, factores, presupuesto y orden antes de tocar random.

En estática el diseño es simple: lista de políticas × N por política × R semillas, con números comunes.

  • ¿Qué decisión debe salir del experimento?
  • ¿Qué factores varío y en qué niveles?
  • ¿Qué N y R por celda?
  • ¿En qué orden corro para no sesgar?

02 · Definición

Las cinco casillas del plano

🎯

Objetivo

La decisión: «elegir Q con ±5 $». Manda e y N.

🎛️

Factores

Lo que varío: Q, precio, umbral. Pocos niveles bien elegidos.

💰

Presupuesto

N por celda × celdas × R. Se reparte donde decide, no parejo.

Plano ejemplo: elegir Q (3 niveles, N = 5 000, R = 10).
CeldaQN × RSemillas
1805 000 × 101…10
21005 000 × 101…10 (mismas)
31205 000 × 101…10 (mismas)

03 · Principios

Objetivo→Factores→Presupuesto
  1. 1
    Fijar e por decisión.

    ±5 $ para elegir Q, ±0,01 para π. e manda N = (zσ/e)².

  2. 2
    Elegir pocos niveles.

    3–5 por factor (bajo/medio/alto). Grilla fina solo donde decide.

  3. 3
    Repartir con criterio.

    Más N cerca del óptimo y en celdas ruidosas; piloto para σ por celda.

  4. 4
    Bloquear con semillas.

    Mismas R semillas en todas las celdas: números comunes que cancelan ruido.

Bloque (semilla)
Cada semilla es un bloque que recorre todas las políticas: la comparación es dentro del bloque.
Piloto por celda
500–1 000 por celda para σ_h: sin σ no hay reparto ni N.
Orden aleatorio
Si hay estado externo (caché, hora), aleatorizar el orden evita sesgos de máquina.

04 · Ejemplos

  1. 1
    Elegir Q.

    3 Q × 5 000 × 10 = 150 000 evals. Mismas 10 semillas: gana el de mejor media global.

  2. 2
    π con 3 N.

    N = 1 000/10 000/100 000 × 5 semillas: curva de error vs costo.

  3. 3
    Precio × Q.

    3×3 = 9 celdas piloto, luego refinar 2×2 alrededor del mejor.

05 · Representación en Python

El plano como lista de celdas

Python en tu navegador. El plano se ejecuta solo.

import random
import math

plano = [{"Q": Q, "N": 2000, "semillas": [1, 2, 3]} for Q in [80, 100, 120]]
print("celdas:", len(plano), "total:", sum(c["N"]*len(c["semillas"]) for c in plano))

def correr(Q, N, s):
    random.seed(s)
    tot = 0
    for _ in range(N):
        D = random.choices([80, 100, 120], weights=[30, 40, 30])[0]
        tot += 5*min(Q, D) - 2*Q
    return tot / N

for c in plano:
    ms = [correr(c["Q"], c["N"], s) for s in c["semillas"]]
    print(c["Q"], [round(m, 1) for m in ms])

06 · Exploración

Laboratorio: presupuestar el experimento

Mové σ del piloto, la precisión e y las réplicas R. El laboratorio calcula n = (1,96σ/e)² por celda y el total con 3 Q. La curva muestra cómo e manda.

EXPERIMENTO 30

Planilla de N

n = (1,96·σ/e)² por celda

Los resultados numéricos aparecen debajo.
n por celda—
Total 3Q × R—
Tiempo ~1ms/eval—
Lectura—

Mové los controles para presupuestar.

La curva n(e) cae como 1/e²: pedir la mitad de error cuesta 4×. El punto es tu pedido.

Preguntas para explorar

  1. Con σ = 15 y e = 2, ¿n ≈ 216? ¿Total con 3Q y R = 10?
  2. Si e pasa de 4 a 2, ¿el total se duplica o cuadruplica?
  3. ¿Qué baja más el total: bajar R o subir e?
Ver respuestas sugeridas
  1. Sí: 216 × 3 × 10 ≈ 6 500 evals. Barato.
  2. Cuadruplica: 1/e² manda.
  3. Subir e (cuadrático) pega más que bajar R (lineal), pero R < 10 pierde diagnóstico.

07 · Comprensión

Confusiones frecuentes

«Grilla fina desde el inicio»

Primero gruesa (3 niveles), luego fina alrededor del mejor. Fina de entrada quema N.

«Igual N para todo»

No: más donde decide (cerca del óptimo) y donde hay más σ. Parejo es injusto.

«Semillas distintas por celda»

Rompe los bloques: usar las mismas para comparar sin ruido extra.

«El piloto es opcional»

Sin σ piloto no hay N ni reparto: es diseñar a ciegas.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: presupuestar

Con σ = 20, e = 2, 4 celdas y R = 10, calculá el total.

import math

sigma, e, celdas, R = 20, 2, 4, 10
n = math.ceil((1.96*sigma/e)**2)
print(n, n*celdas*R)
Ver solución razonada

n ≈ 385, total ≈ 15 400. En segundos con 1ms/eval.

Ejercicio 2: bloques con mismas semillas

Compará Q = 90/100 con 5 semillas comunes.

import random

def media(Q, N, s):
    random.seed(s)
    return sum(5*min(Q, random.choices([80,100,120], weights=[30,40,30])[0])-2*Q for _ in range(N))/N

for s in range(1, 6):
    print(s, round(media(100, 2000, s)-media(90, 2000, s), 1))
Ver solución

Diferencias siempre positivas ~40–60: 100 gana en todos los bloques.

Ejercicio 3: refinar

Tras Q = 100 ganador entre 80/100/120, ¿qué grilla sigue?

Ver una posible respuesta
print([90, 100, 110])  # fina alrededor del mejor

Refinar local con más N: el diseño secuencial gasta donde decide.

09 · Síntesis

Ideas para recordar

  • Diseño = objetivo + factores + N×R + semillas + orden, por escrito.
  • e manda N; piloto da σ; bloques dan comparación justa.
  • Gruesa primero, fina después; más N donde decide.
  • Total = celdas × N × R: presupuestar antes de correr.
  • Mismas semillas en todas las celdas.

En el próximo tema separaremos lo urgente de lo importante: el planteo táctico de experimentos.