Acopia — plan de despacho del día

Motor determinista predict-then-optimize para una planta solar con batería (PV-BESS) en el mercado eléctrico chileno: pronostica el costo marginal (CMg) nodal y decide cuándo cargar y descargar para arbitrar el diferencial y rescatar energía que se vertería. Día típico del SEN: sobreoferta solar a mediodía, punta vespertina.

Plan plan-1 · política arbitraje-demo v1 · semilla 42 · misma entrada → mismo plan (determinista, auditable)

Ingreso esperado del día
US$ 17
plan optimizado vía LP (HiGHS)
Diferencial CMg punta/valle
110 US$/MWh
el spread que la batería arbitra
Horas a CMg = 0
5 h
sobreoferta solar a mediodía
Energía descargada
114 kWh
vendida en la punta vespertina

El plan del día

La batería carga cuando el CMg colapsa (absorbe el excedente solar) y descarga en la punta de la tarde. Pasa el cursor —o usa las flechas del teclado— para ver cada hora con el motivo que reconstruye el explicador del dominio.

Costo marginal (US$/MWh)
Potencia (kW) — PV disponible y acciones de la batería
PV disponible Carga (absorbe) Descarga (inyecta)
Estado de carga de la batería (%)
Ver como tabla (24 horas, valores exactos)
HoraCMg (US$/MWh)PV (kW)Acción Batería (kW)SoCVertido (kWh)Motivo
00:00750Descargar+190%0.0Descarga: el CMg (75000 mills/MWh) es de los más caros del horizonte; vende lo almacenado.
01:00740Retener00%0.0Retiene: el CMg (74000 mills/MWh) es intermedio en el horizonte; no hay diferencial que capturar.
02:00730Retener00%0.0Retiene: el CMg (73000 mills/MWh) es intermedio en el horizonte; no hay diferencial que capturar.
03:00720Retener00%0.0Retiene: el CMg (72000 mills/MWh) es intermedio en el horizonte; no hay diferencial que capturar.
04:00730Retener00%0.0Retiene: el CMg (73000 mills/MWh) es intermedio en el horizonte; no hay diferencial que capturar.
05:00750Retener00%0.0Retiene: el CMg (75000 mills/MWh) es de los más caros del horizonte; no hay diferencial que capturar.
06:00705Retener00%0.0Retiene: el CMg (70000 mills/MWh) es intermedio en el horizonte; no hay diferencial que capturar.
07:004020Retener00%0.0Retiene: el CMg (40000 mills/MWh) es intermedio en el horizonte; no hay diferencial que capturar.
08:00545Retener00%0.0Retiene: el CMg (5000 mills/MWh) es de los más baratos del horizonte; no hay diferencial que capturar.
09:00065Retener00%0.0Retiene: el CMg (0 mills/MWh) es de los más baratos del horizonte; no hay diferencial que capturar.
10:00080Retener00%0.0Retiene: el CMg (0 mills/MWh) es de los más baratos del horizonte; no hay diferencial que capturar.
11:00090Cargar−4038%0.0Carga: el CMg (0 mills/MWh) es de los más baratos del horizonte; almacena para vender más caro. Con CMg <= 0, inyectar pagaría por generar: absorber es lo óptimo.
12:00095Cargar−1552%0.0Carga: el CMg (0 mills/MWh) es de los más baratos del horizonte; almacena para vender más caro. Con CMg <= 0, inyectar pagaría por generar: absorber es lo óptimo.
13:00090Cargar−50100%0.0Carga: el CMg (0 mills/MWh) es de los más baratos del horizonte; almacena para vender más caro. Con CMg <= 0, inyectar pagaría por generar: absorber es lo óptimo.
14:00380Retener0100%0.0Retiene: el CMg (3000 mills/MWh) es de los más baratos del horizonte; no hay diferencial que capturar.
15:001065Retener0100%0.0Retiene: el CMg (10000 mills/MWh) es de los más baratos del horizonte; no hay diferencial que capturar.
16:002545Retener0100%0.0Retiene: el CMg (25000 mills/MWh) es intermedio en el horizonte; no hay diferencial que capturar.
17:006020Retener0100%0.0Retiene: el CMg (60000 mills/MWh) es intermedio en el horizonte; no hay diferencial que capturar.
18:00955Retener0100%0.0Retiene: el CMg (95000 mills/MWh) es de los más caros del horizonte; no hay diferencial que capturar.
19:001100Descargar+5047%0.0Descarga: el CMg (110000 mills/MWh) es de los más caros del horizonte; vende lo almacenado.
20:001050Descargar+450%0.0Descarga: el CMg (105000 mills/MWh) es de los más caros del horizonte; vende lo almacenado.
21:00950Retener00%0.0Retiene: el CMg (95000 mills/MWh) es de los más caros del horizonte; no hay diferencial que capturar.
22:00850Retener00%0.0Retiene: el CMg (85000 mills/MWh) es de los más caros del horizonte; no hay diferencial que capturar.
23:00800Retener00%0.0Retiene: el CMg (80000 mills/MWh) es de los más caros del horizonte; no hay diferencial que capturar.

El pipeline de datos que alimenta al motor

De descargas crudas del mercado real a un plan auditable — ingesta, limpieza, alineación y validación out-of-sample, reproducibles por CLI.

XLSX del Coordinador

CMg horario real por barra (S.GREGORIO, 2025). Formato hostil: coma decimal chilena, fecha en celdas combinadas, columna titulada por el mnemónico de la barra.

Explorador Solar (TMY)

Generación PV de año típico (Antofagasta), ~54 filas de metadatos sobre la tabla y sin calendario común con el CMg.

acopia-datos alinear

Parseo tolerante + alineación por posición + escala a unidades enteras del dominio (mills/MWh, W) → planta_2025.csv, 8.754 h alineadas.

Backtest rodante

7 folds × 24 h out-of-sample, entrenamiento régimen-local (ventana de 720 h): el forecast se valida contra lo que no vio.

Plan de despacho

Predict-then-optimize: LP (cvxpy + HiGHS) cuantizado a enteros y validado contra el modelo físico de la batería — siempre factible.

Backtest anual de forecasters (CMg real 2025, 7 folds)

El target difícil es el CMg — es el que decide el arbitraje. El Seq2Seq-LSTM entrenado régimen-local recorta el RMSE de CMg −23% frente al baseline; en generación el naive sigue ganando (y así se reporta).

ModeloGen RMSE (W)CMg RMSE (mills/MWh)CMg MAPE
Estacional-naive (baseline)36.226,22039.1%
SARIMAX41.328,200~40%
Seq2Seq-LSTM (ventana 720 h)46.5 20,300 (−23%)~39%

Cifras direccionales: planta modelo de 1 kW (generación TMY) + CMg real de una barra; no es telemetría de una planta en operación. La honestidad del reporte es parte del método: cada cifra sale de un comando reproducible (acopia-datos backtest).