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.
| Celda | Q | N × R | Semillas |
|---|---|---|---|
| 1 | 80 | 5 000 × 10 | 1…10 |
| 2 | 100 | 5 000 × 10 | 1…10 (mismas) |
| 3 | 120 | 5 000 × 10 | 1…10 (mismas) |
03 · Principios
- 1Fijar e por decisión.
±5 $ para elegir Q, ±0,01 para π. e manda N = (zσ/e)².
- 2Elegir pocos niveles.
3–5 por factor (bajo/medio/alto). Grilla fina solo donde decide.
- 3Repartir con criterio.
Más N cerca del óptimo y en celdas ruidosas; piloto para σ por celda.
- 4Bloquear 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
- 1Elegir Q.
3 Q × 5 000 × 10 = 150 000 evals. Mismas 10 semillas: gana el de mejor media global.
- 2π con 3 N.
N = 1 000/10 000/100 000 × 5 semillas: curva de error vs costo.
- 3Precio × 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.
Planilla de N
n = (1,96·σ/e)² por celda
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
- Con σ = 15 y e = 2, ¿n ≈ 216? ¿Total con 3Q y R = 10?
- Si e pasa de 4 a 2, ¿el total se duplica o cuadruplica?
- ¿Qué baja más el total: bajar R o subir e?
Ver respuestas sugeridas
- Sí: 216 × 3 × 10 ≈ 6 500 evals. Barato.
- Cuadruplica: 1/e² manda.
- 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.