EN
← Volver al Portafolio
Minería y Optimización agosto de 2026

PhaseFlow, Programa de Producción de Rajo Abierto con Cota Certificada

Un programa de producción de rajo abierto, resuelto con una cota certificada y animado año a año sobre el modelo de bloques. PitForge responde qué bloques vale la pena extraer; PhaseFlow responde cuándo, sujeto a precedencia de talud en cada periodo y a capacidad de mina y planta por periodo, maximizando el VAN descontado. Ese es el problema de rajo con restricciones (CPIT). El ancla de confianza es la instancia publicada MineLib newman1.cpit resuelta TAL COMO SE PUBLICÓ, con sus propios seis periodos, su tasa de descuento de ocho por ciento y sus dos capacidades: reproduce el óptimo del rajo final exactamente (26.086.899), su cota LP conjunta queda en 24.486.184, bajo la cota LP de 24.486.549 publicada para el problema PCPSP, que es más rico, y su mejor programa queda 1,37 por ciento bajo esa cota y 0,11 por ciento bajo un óptimo entero externo. La cota no necesita solver LP (algoritmo de multiplicador crítico, exacto en O(mn log n) como clausuras máximas paramétricas), y por eso todo el problema se re-resuelve en vivo en el navegador. Dos cotas corren en cada caso y se reporta la diferencia entre ellas, porque esa diferencia es la parte de una brecha que pertenece a la cota y no al plan.

Qué resuelve
CPIT: cuándo extraer cada bloque, bajo precedencia de talud por periodo y capacidad de mina/planta, maximizando el VAN descontado
La cota
Algoritmo de multiplicador crítico (Chicoisne et al. 2012, doi:10.1287/opre.1120.1050): la relajación LP de CPIT exacta en O(mn log n) como clausuras máximas paramétricas, sin solver LP
Vía en vivo
Un port TypeScript re-resuelve todo el problema en el navegador, así la tasa de descuento, las capacidades y el ángulo de talud mueven la respuesta; un test de paridad verifica que reproduce la cota de Python
Explotabilidad como KPI
Componentes por periodo, participación del componente mayor y ancho mínimo explotado, reportados por caso; la pared del rajo lleva el color del programa en cada cuadro: cada bloque en pie junto a uno extraído toma el periodo que lo expuso, así la pared queda 100% coloreada por periodo incluido el último cuadro, donde un render de corte no muestra programa alguno
Alcance
Sin acopios (el modelo de ley mezclada es bilineal), sin mezcla ni restricciones laterales generales, sin restricciones de producción mínima, sin IP estocástico de dos etapas. No es para planificación minera de producción
Motor y despliegue
oreblocks (publicado por separado en PyPI, consumido fijado; PhaseFlow no declara paquete propio); SPA React 19 + Vite en GitHub Pages, MIT; trece casos horneados; versión 0.07.005; parte del hub Faena
Diagrama de arquitectura de PhaseFlow, Programa de Producción de Rajo Abierto con Cota Certificada
#mining-optimization #mine-planning #scheduling #cpit #lagrangian-bound #max-flow #three-js #minelib #mining

Contexto de Negocio

Un programa de producción es donde un plan minero se convierte en dinero y en compromisos: fija el VAN con que se valoriza el proyecto, la flota de equipos que debe existir cada año, y la alimentación que la planta realmente verá. El valor de una cota certificada es que convierte un número en una afirmación con un límite adjunto, y la discusión pasa de si un VAN es creíble a cuánto valor queda demostrablemente sobre la mesa. Reportar ambas cotas es la misma disciplina un nivel más profundo: dice si la brecha restante es una debilidad del plan o holgura en la matemática usada para medirla. La coherencia espacial importa por la misma razón práctica: un programa que dispersa un periodo en muchos componentes pequeños es caro o imposible de explotar de verdad, y la app reporta componentes por periodo, participación del componente mayor y el ancho mínimo explotado como KPIs de primera clase, en vez de dejar la explotabilidad a que un revisor mire una imagen.

Valor Estratégico

PhaseFlow es el paso de programación de la línea de rajo abierto, y gana confianza siendo medible contra trabajo que no es el suyo. Resuelve una instancia publicada de MineLib tal como se publicó y pone sus números junto a los publicados, y dice contra qué cota se mide cada brecha. Calcula su cota sin solver LP, que es lo que hace posible una vía en vivo genuina en vez de una reproducción. Corre dos cotas en cada caso y reporta su diferencia, así una brecha puede atribuirse al plan o a la cota. Trata la coherencia espacial como KPI porque los propios autores del algoritmo predicen que los programas a nivel de bloque se dispersan. Y su vía aprendida está caracterizada, no solo medida: la respuesta a cuándo falla el surrogate cambió dos veces bajo medición. Primero el cuerpo mineralizado, después la tasa de descuento en los depósitos retenidos, hasta que una tercera partición le dio a esa regla un recall de 0,625 y expuso el estudio mismo, cuyo barrido movía la tasa de descuento y la capacidad de planta juntas (correlación -0,735). Con un barrido cruzado la señal es el cuerpo mineralizado en las dos particiones: dos tercios de los casos de núcleo y halo fallan y los estratificados nunca. El producto mide en vez de predecir: cada caso horneado trae el plan exacto que el peldaño aprendido aproxima, y la razón entre ambos está junto al selector de método. En la vía en vivo todavía no hay guarda utilizable, porque un depósito real no llega con etiqueta de arquetipo y la regla de escenario atrapa solo 0,44 de las fallas, y el producto lo dice. El alcance se declara en el producto: sin acopios, sin mezcla, sin restricciones de producción mínima, sin programación entera estocástica de dos etapas, y no es para planificación minera de producción. El motor es el paquete oreblocks publicado por separado y consumido fijado; el producto no declara paquete propio.

El Desafío

Saber qué bloques vale la pena extraer es solo la mitad de un plan de rajo. La otra mitad es cuándo: un programa que respete la precedencia de talud en cada periodo, se mantenga dentro de la capacidad de mina y planta de cada año, y maximice el valor descontado. Ese es el problema de rajo con restricciones, y es NP-difícil, así que nadie lo resuelve a optimalidad probada a tamaño real. La consecuencia es que una herramienta de programación puede reportar el VAN que quiera y sonar convincente, porque sin una cota no hay contra qué comparar el número. Reportar una brecha tampoco lo arregla por sí solo: una brecha es la distancia entre un plan y una cota, así que una cota floja hace ver mal a un buen plan y esconde cuál mitad del número es realmente el problema. Y un programa que se ve óptimo en una planilla puede ser inexplotable en la práctica si los periodos se dispersan en fragmentos desconectados por el rajo.

Nuestro Enfoque

PhaseFlow se ancla a una instancia publicada resuelta tal como se publicó. El caso MineLib newman1.cpit corre con sus propios seis periodos, su tasa de descuento de ocho por ciento y sus dos capacidades, y los resultados quedan junto a los publicados (Jelvez, Morales y Nancel-Penard, MPES 2018): el óptimo del rajo final se reproduce exactamente en 26.086.899, la cota LP conjunta llega a 24.486.184 contra una cota LP PCPSP publicada de 24.486.549, y el mejor programa (una ventana de tiempo deslizante, 24.149.869) queda 1,37 por ciento bajo su propia cota LP. El artículo de 2018 reporta 1,26 por ciento contra su cota PCPSP; los dos porcentajes usan cotas distintas, así que se muestran lado a lado y no se leen como una competencia. Un registro externo de AMPL y Gurobi reporta después un óptimo entero de CPIT de 24.176.864,82, que PhaseFlow cita y no reprodujo: el programa queda 0,11 por ciento bajo él, así que la mayor parte del 1,37 por ciento es la brecha de integralidad del LP y no una pérdida del método de programación. La brecha era 2,49 por ciento hasta que se descubrió que la ventana deslizante era un voraz de un periodo cuyo argumento de anticipación no cambiaba nada; corregirla cerró la brecha. La verificación de que la cota es real es su ORDEN: una cota LP de CPIT debe quedar bajo una cota LP de PCPSP porque PCPSP es el problema más rico, y así ocurre, por 365 unidades en 24,5 millones. La cota no necesita ningún solver LP: el algoritmo de multiplicador crítico (Chicoisne et al. 2012) resuelve la relajación LP de CPIT exactamente en O(mn log n) como una secuencia de clausuras máximas paramétricas, que es justo por qué un port en TypeScript puede re-resolver todo el problema en vivo en el navegador con un test de paridad que verifica que reproduce la cota de Python. Dos cotas corren en cada caso: una certificada pero FLOJA que relaja los recursos de a uno, y la cota CONJUNTA de Bienstock-Zuckerberg; la app muestra ambas y nombra cuál usó, porque la diferencia entre ellas es la parte de una brecha reportada que pertenece a la cota y no al plan. En una instancia de un solo recurso las dos coinciden a precisión de máquina, que es la verificación de corrección más fuerte del repositorio. Un surrogate aprendido de tiempo esperado produce un programa sin resolver ningún LP (su peor caso retenido vale 0,561 del plan que dan los tiempos esperados exactos), que es lo que hace asequible un ensemble de incertidumbre, y se separa por semilla de DEPÓSITO en vez de por fila.

Indicadores Clave de Rendimiento

KPILínea BaseResultadoImpacto
Una instancia publicada, resuelta tal como se publicóInventar un escenario y reportar un VAN sin nada contra qué compararloMineLib newman1.cpit con sus propios 6 periodos, tasa 8% y 2 capacidades: rajo final 26.086.899 (coincidencia exacta), cota LP CPIT conjunta 24.486.184 bajo la cota LP PCPSP publicada de 24.486.549; mejor programa 24.149.869, 1,37% bajo su cota LP y 0,11% bajo un óptimo entero externo (24.176.864,82, citado, no reproducido)Los números son verificables contra trabajo que no es mío, y cada brecha nombra la cota contra la que se mide
Dos cotas, y la diferencia entre ellasUna cota, así una brecha reportada mezcla un plan débil con una cota flojaUna cota certificada pero floja de un recurso a la vez Y la cota conjunta de Bienstock-Zuckerberg en cada caso, ambas mostradas y nombrando la usada; coinciden a precisión de máquina en una instancia de un solo recursoUna brecha puede atribuirse al plan o a la matemática que la mide
Un peor caso medido, no predichoReportar un peor caso como nota al pie y nunca decir cuándo ocurreEl peor caso retenido del surrogate es 0,561 del plan exacto. Una regla por tasa de descuento cayó a recall 0,625 en una tercera partición y expuso un barrido que movía tasa y capacidad juntas (correlación -0,735); cruzado, la señal es el cuerpo mineralizado (dos tercios de los casos de núcleo y halo fallan, los estratificados nunca). Cada caso horneado muestra su razón medida contra el plan exacto; la vía en vivo aún no tiene guarda utilizable (recall de la regla de escenario 0,44)La señal de confiabilidad es un hecho del caso que se mira, mostrado donde se elige el método

Arquitectura

phaseflow pipeline

phaseflow pipeline

Stack Tecnológico

Python oreblocks NumPy TypeScript React Vite three.js MineLib

En acción

Un recorrido corto por la app en vivo: la interfaz real, grabada desde el sitio desplegado.

PhaseFlow, Programa de Producción de Rajo Abierto con Cota Certificada en acción

Capturas de la Aplicación

PhaseFlow, Programa de Producción de Rajo Abierto con Cota Certificada
PhaseFlow, Programa de Producción de Rajo Abierto con Cota Certificada