Manual de Uso Footprint Finder UDD
Manual de Uso Footprint Finder UDD
PROFESOR
Jorge Contreras R.
ALUMNOS
Nicolás Ayarza D.
Francisco Aguirre C.
Noviembre 2019
Página 2
Contenido
1. Agradecimientos ..............................................................................................................................................4
2. Introducción y objetivos del proyecto ............................................................................................................5
2.1. Introducción .............................................................................................................................................5
2.2. Objetivo General.......................................................................................................................................5
2.3. Objetivos Específicos ................................................................................................................................5
3. Metodología de cálculo ...................................................................................................................................6
3.1. Valorización Nominal de las UBC..............................................................................................................6
3.1.1. Ingresos.............................................................................................................................................6
3.1.2. Gastos Operación .............................................................................................................................7
3.2. Periodo de extracción ...............................................................................................................................7
3.3. Beneficio Actualizado ...............................................................................................................................7
3.4. Gasto de preparación de área y valorización acumulada por UBC ..........................................................7
3.5. Altura Económica Máxima de la Columna................................................................................................8
4. Instrucciones de ejecución del programa .......................................................................................................9
4.1. Softwares requeridos ...............................................................................................................................9
4.1.1. NetBeans ..........................................................................................................................................9
4.1.2. OpenScad ..........................................................................................................................................9
4.2. Instalación del código ...............................................................................................................................9
4.3. Modelo de Bloques................................................................................................................................ 11
4.4. Ejecución del programa ......................................................................................................................... 12
4.5. Salidas de NetBeans .............................................................................................................................. 14
4.6. Visualización en OpenScad .................................................................................................................... 15
5. Código del algoritmo..................................................................................................................................... 18
5.1. Captura de información y valorización nominal .................................................................................... 18
5.1.1. Instrucciones para llamar a las bibliotecas de JAVA para ser usados en el programa .................. 18
5.1.2. Instrucciones para activar la interfaz y leer desde el teclado el nombre del modelo de bloques 18
5.1.3. Separar las filas del modelo de bloques ........................................................................................ 18
5.1.4. Instrucciones para separar en columnas ....................................................................................... 18
5.1.5. Contador y asignación de puntos de extracción ........................................................................... 19
5.1.6. Creación del archivo ID_PUNTOS.txt ............................................................................................. 19
5.1.7. Valorización Nominal ..................................................................................................................... 19
5.2. Máx VAN y Altura Columna ................................................................................................................... 20
5.2.1. Parámetros de entrada .................................................................................................................. 20
5.2.2. Contar número de Filas ................................................................................................................. 21
5.2.3. Separar filas ................................................................................................................................... 21
5.2.4. Contar número de caracteres por fila ........................................................................................... 21
5.2.5. Contar caracteres por fila (Para efectos de buscar el Separador) ................................................. 21
5.2.6. Matriz de datos, utilizando los caracteres por fila, para efectos de lectura ................................. 21
5.2.7. Valor actualizado por UBC asumiendo un periodo fijo de extracción por bloque ........................ 22
5.2.8. Inicialización de Variables.............................................................................................................. 22
5.2.9. VAN Acumulado por punto de extracción ..................................................................................... 22
5.3. Búsqueda de índice que maximiza VAN en columna ............................................................................ 22
Página 3
Tabla de Ecuaciones
Tabla de Ilustraciones
1. Agradecimientos
En primer lugar, quisiera dar las gracias al equipo de Ingeniería Civil en Minería de la Universidad del Desarrollo,
por dar el espacio para desarrollar este humilde pero útil programa para los alumnos de los últimos años de
carrera. También agradecer al Centro de Innovación Docente de la Universidad por el financiamiento y la
excelente iniciativa de fomentar este tipo de concursos para mejorar la docencia.
Agradecer a mis alumnos Nicolás Ayarza y Francisco Aguirre por las horas dedicadas a este proyecto.
El código está abierto y permite ir mejorando esta primera versión, por lo cual errores o simplificaciones del
código, por favor hacerlos llegar.
Página 5
El concepto base, es poder a partir de un modelo de bloques diluido dedicar más tiempo en análisis de resultados,
que en el desarrollo de los cálculos que actualmente se usan en plataformas como Excel. Por otra parte, la
posibilidad de desplegar en 3D los resultados, permitirán al estudiante obtener conclusiones más fácilmente que
en un modelo 2D. Estos softwares hoy existen en la industria, pero con un valor por sobre los US$ 40.000 al año
de licencias, y sin la posibilidad de modificar el código para poder entender lo que está detrás del software (Efecto
Caja Negra). Es por lo anterior que se desea desarrollar una herramienta gratis, fácil y que permita a los alumnos
poder dedicar tiempo al análisis, en vez de solamente realizar cálculos.
3. Metodología de cálculo
La Ilustración 3-1 corresponde a un resumen de la lógica de valorización y definición de la altura que maximiza
el VAN (Valor Actual Neto) para cada columna de extracción del modelo de bloques.
Beneficio Nominal
Para efectos de esta primera versión del programa, los valores vienen por defecto y corresponde a:
𝑟 : Tasa de descuento
Es importante destacar que el algoritmo supone que un PE de extracción se construye un año antes de iniciar la
extracción.
𝑆. 𝐴.
𝑥 ≤ 𝐴𝑙𝑡𝑢𝑟𝑎 𝑀á𝑥𝑖𝑚𝑎[𝑚]⁄ℎ𝑈𝐵𝐶
ℎ𝑈𝐵𝐶 : Altura del modelo de bloque (UBC)
Ilustración 3-2 Altura económica que maximiza el van para 3 puntos de extracción
Página 9
https://netbeans.org/downloads/8.2/
4.1.2. OpenScad
http://www.openscad.org/downloads.html
En “Project Name” se debe reemplazar el nombre por tc (este nombre es básicamente debido a que se asignó
estas siglas para la creación del proyecto y a su vez para la clase (en java) del proyecto – puede ser reemplazado,
pero es importante modificar las partes del código que posean o llamen a tc).
Página 11
Una vez realizado lo anterior, se desplegará la ventana de la Ilustración 4-4. Todo el contenido debe ser borrado,
para ser reemplazado por el texto del archivo Código.txt
En este punto se debe guardar los cambios, y el programa queda listo para ser ejecutado
El atributo más relevante para el buen funcionamiento del algoritmo corresponde a la posición de la columna
(Pos_Col). En la lógica de explotación de un Block/Panel Caving, la posición de columna da cuenta del orden de
salida, desde el Piso del UCL a la topografía.
❖ La separación entre columnas del archivo debe ser con ; (punto y coma)
❖ No hay limitación respecto al número de decimales para las diferentes variables
❖ La ley de cobre debe estar en porcentaje
❖ Si el código y el modelo de bloque son correctos, el programa comenzará a solicitar los parámetros
para la evaluación técnica económica
UBC VALORIZADA NOMINAL.txt : Nombre PE, Coordenadas y Valor nominal por UBC en altura
Cada uno de estos archivos permite al usuario trabajar información de detalle en Excel para efectos de análisis
estadísticos más profundos. Donde el archivo resultados permite obtener el nombre de punto de extracción, las
coordenadas, altura que maximiza el VAN y por ende el VAN Máximo factible de obtener.
Con el archivo de salida OPENSCAD.txt es posible copiar el contenido de este (block de notas) y copiarlo
directamente en la venta de interfaz de Openscad donde al apretar ENTER inmediatamente comienza a graficar
a escala la altura de columna asociada a cada punto de extracción, y el color representar el rango de VAN [MUS$]
Página 16
5. Bibliografía y recursos
III. ARANEDA, Octavio and GAETE, Sergio. Continuous modeling for caving exploitation. En: MassMin 2004
(2004, Santiago, Chile). in proceedings. Santiago, Chile, MassMin 2004, 2004. pp. 505 – 507.
IV. CONTRERAS, Jorge. Metodología para determinar el valor en riesgo de un proyecto minero, mediante la
aplicación de un modelo matemático de optimización. En: Universidad del Desarrollo (2016, Santiago,
Chile). Tesis de grado de magíster en ingeniería industrial y de sistemas.
V. CONTRERAS, Jorge, CORNEJO Javier and CAVIEDES, Christian, 2016. “Metodología para estimación de la
tasa de incorporación de área en panel caving, Codelco – División El Teniente”, en U-Mining 2016: Primer
congreso internacional en minería subterránea, ed´s: R Castro and M Valencia, Universidad de Chile,
Santiago, Chile, pp. 452-460.
Página 18
ANEXOS
Código del algoritmo
Captura de información y valorización nominal
Instrucciones para llamar a las bibliotecas de JAVA para ser usados en el programa
package tc;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.StringTokenizer;
Instrucciones para activar la interfaz y leer desde el teclado el nombre del modelo de bloques
public class TC {
public static void main(String[] args) throws IOException{
System.out.print("Ingrese Nombre de Modelo de Bloques: ");
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String Modelo_Bloques = in.readLine();
BufferedReader a = new BufferedReader(new FileReader(Modelo_Bloques));
int contador=0;
while(a.readLine()!=null){
contador=contador+1;
}
System.out.println("Modelo de Bloques Correctamente Leido ");
System.out.println("Número de Filas: "+contador);
for(int a3=0;a3<6;a3++){
fila_columna_MB[a2][a3]=c.nextToken();
}
}
int contador_puntos=0;
for(int a4=0;a4<contador;a4++){
if(fila_columna_MB[a4][3].equals("1")==true){
contador_puntos=contador_puntos+1;
}
else
contador_puntos=contador_puntos+0;
}
System.out.println("Número de Puntos de Extracción en Modelo de Bloques: "+contador_puntos);
Valorización Nominal
String A2 = in.readLine();
double descuento=Double.parseDouble(A2);
System.out.print("Recuperación Metalúrgica Concentradora [%]: ");
String A3 = in.readLine();
double recuperación=Double.parseDouble(A3)/100;
System.out.print("Costo Mina + Costo Planta [US$/t]: ");
String A4 = in.readLine();
double costos=Double.parseDouble(A4);
System.out.print("Costo Preparación de área [US$/m2]: ");
String A5 = in.readLine();
double inversion =Double.parseDouble(A5);
System.out.println("----------------------------------------------------------");
Double ley = (costos/((precio-descuento)*recuperación*2204.62))*100;
int ley1 =(int)((int)1000*ley);
Double ley2 = (double)ley1/1000;
System.out.println("----------------------------------------------------------");
System.out.println("Ley de Corte Critica[%]: "+ ley2);
System.out.println("----------------------------------------------------------");
PrintWriter archivo1 = new PrintWriter(new FileWriter("UBC VALORIZADA NOMINAL.txt"));
for(int z=1;z<contador;z++){
Valor_UBC[z]=
Double.parseDouble(fila_columna_MB[z][4])*(Double.parseDouble(fila_columna_MB[z][5])*(precio-
descuento)*2204.62*recuperación/100-costos);}
String [] A = new String [contador_puntos];
for(int tttt=0;tttt<contador_puntos;tttt++){
A[tttt]="";}
for(int y=0;y<contador_puntos;y++){
String Busqueda = Codigo_Puntos[y];
for(int w=1;w<contador;w++){
if(Busqueda.equals(fila_columna_MB[w][0])==true){
A[y]= A[y].concat(String.valueOf(Valor_UBC[w])).concat(";");}}
archivo1.println(Codigo_Puntos[y]+";"+X[y]+";"+Y[y]+";"+Z[y]+";"+A[y]);}
archivo1.close();
System.out.println("---------Valorización Nominal Finalizada con Exito--------");
Separar filas
Matriz de datos, utilizando los caracteres por fila, para efectos de lectura
//MATRIZ DE DATOS, UTILIZANDO LOS CARACTERES POR FILA, PARA EFECTOS DE LA LECTURA
String[][]fila_columna = new String[contador_1][100];
Página 22
for(int ass2=0;ass2<contador_1;ass2++){
StringTokenizer css = new StringTokenizer(Filas[ass2],";");
for(int ass3=0;ass3<contador_columnas_fila[ass2];ass3++){
fila_columna[ass2][ass3]=css.nextToken();
}
}
Valor actualizado por UBC asumiendo un periodo fijo de extracción por bloque
for(int alpha=0;alpha<contador_1;alpha++){
maxt[alpha]=-99999999;}
int indice[]=new int[contador_1];
for(int ixxx=0;ixxx<contador_1;ixxx++){
for(int jaxx=0;jaxx<Math.min(contador_columnas_fila[ixxx],limite);jaxx++){
maxt[ixxx]=Math.max(maxt[ixxx],Math.max(vss1[ixxx][jaxx],vss1[ixxx][jaxx+1]));
if(String.valueOf(maxt[ixxx]).equals(String.valueOf(vss1[ixxx][jaxx]))){
indice[ixxx]=jaxx;
}
}
}
PrintWriter archivo2 = new PrintWriter(new FileWriter("Actualizado_Acumulado.txt"));
for(int ia1xx=0;ia1xx<contador_1;ia1xx++){
for(int ja1xx=0;ja1xx<contador_columnas_fila[ia1xx]-4;ja1xx++){
concatenar[ia1xx]= concatenar[ia1xx].concat(String.valueOf(vss1[ia1xx][ja1xx])).concat(";");
}
archivo2.println(fila_columna[ia1xx][0]+";"+fila_columna[ia1xx][1]+";"+fila_columna[ia1xx][2]+";"+fila_column
a[ia1xx][3]+";"+concatenar[ia1xx]);}
archivo2.close();
System.out.print("Cota de UCL para dibujar en OpenScad: ");
String OpenScad = in.readLine();
int cota=(int)Double.parseDouble(OpenScad);
PrintWriter archivo3 = new PrintWriter(new FileWriter("RESULTADOS.txt"));
archivo3.println("ID_PE;X;Y;ÁREA;Altura_UBC_Máx_VAN;MAX_VAN[US$]");
for(int ixz=0;ixz<contador_1;ixz++){
archivo3.println(fila_columna[ixz][0]+";"+fila_columna[ixz][1]+";"+fila_columna[ixz][2]+";"+fila_columna[ixz][3]
+";"+indice[ixz]*Altura1+";"+maxt[ixz]);
}
archivo3.close();
PrintWriter archivo4 = new PrintWriter(new FileWriter("OPENSCAD.txt"));
for(int ixz=0;ixz<contador_1;ixz++){
archivo4.println(fila_columna[ixz][1]+";"+fila_columna[ixz][2]+";"+fila_columna[ixz][3]+";"+cota+";"+indice[ixz]
*Altura1+";"+maxt[ixz]);
}
archivo4.close();
}
}