Added the files.
This commit is contained in:
commit
6d7acb3556
9 changed files with 823 additions and 0 deletions
73
Grade_Calculator.py
Normal file
73
Grade_Calculator.py
Normal file
|
@ -0,0 +1,73 @@
|
|||
import pandas as pd
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
|
||||
# === Input Data ===
|
||||
# Weighted Grade (%): Represents the metal content of ore
|
||||
# Net Price ($/unit): Fixed assumed net revenue per unit of recovered metal
|
||||
data = {
|
||||
"Weighted Grade (%)": [0.5, 1.0, 1.5, 2.0, 2.5],
|
||||
"Net Price ($/unit)": [100, 100, 100, 100, 100]
|
||||
}
|
||||
|
||||
df = pd.DataFrame(data)
|
||||
|
||||
# === Recovery Calculation (Logistic Model) ===
|
||||
# Recovery (%) = R_max / (1 + exp(-k * (Grade - x0)))
|
||||
# Models increasing recovery efficiency with grade using an S-curve
|
||||
R_max = 100 # Maximum theoretical recovery (%)
|
||||
k = 10 # Steepness of the logistic curve
|
||||
x_0 = 0.8 # Grade at which recovery rate reaches ~50% of R_max
|
||||
|
||||
df["Recovery (%)"] = (R_max / (1 + np.exp(-k * (df["Weighted Grade (%)"] - x_0)))) / 100
|
||||
|
||||
# === Processing Cost Estimation (Linear Regression Model) ===
|
||||
# Processing Cost ($/t) = A + B * Grade
|
||||
# Reflects increasing cost with higher grade due to more intensive processing
|
||||
A = 12 # Fixed base processing cost ($/t)
|
||||
B = 0.1 # Incremental cost increase per % grade
|
||||
df["Processing Cost ($/t)"] = A + B * df["Weighted Grade (%)"]
|
||||
|
||||
# === Cut-off Grade Calculation ===
|
||||
# Cut-off Grade (%) = 100 * (Processing Cost / (Net Price * Recovery))
|
||||
# Represents the minimum grade required to break even
|
||||
df["Cut-off Grade (%)"] = 100 * (df["Processing Cost ($/t)"] / (df["Net Price ($/unit)"] * df["Recovery (%)"]))
|
||||
|
||||
# === Output Table ===
|
||||
print("\nCalculated Mining Metrics:")
|
||||
print(df[[
|
||||
"Weighted Grade (%)",
|
||||
"Recovery (%)",
|
||||
"Processing Cost ($/t)",
|
||||
"Cut-off Grade (%)"
|
||||
]])
|
||||
|
||||
# === Visualization ===
|
||||
plt.figure(figsize=(15, 5))
|
||||
|
||||
# Plot 1: Recovery vs Grade
|
||||
plt.subplot(1, 3, 1)
|
||||
plt.plot(df["Weighted Grade (%)"], df["Recovery (%)"], marker='s', color='green')
|
||||
plt.title("Recovery vs Weighted Grade")
|
||||
plt.xlabel("Weighted Grade (%)")
|
||||
plt.ylabel("Recovery (%)")
|
||||
plt.grid(True)
|
||||
|
||||
# Plot 2: Processing Cost vs Grade
|
||||
plt.subplot(1, 3, 2)
|
||||
plt.plot(df["Weighted Grade (%)"], df["Processing Cost ($/t)"], marker='^', color='red')
|
||||
plt.title("Processing Cost vs Weighted Grade")
|
||||
plt.xlabel("Weighted Grade (%)")
|
||||
plt.ylabel("Processing Cost ($/t)")
|
||||
plt.grid(True)
|
||||
|
||||
# Plot 3: Cut-off Grade vs Grade
|
||||
plt.subplot(1, 3, 3)
|
||||
plt.plot(df["Weighted Grade (%)"], df["Cut-off Grade (%)"], marker='o', color='blue')
|
||||
plt.title("Cut-off Grade vs Weighted Grade")
|
||||
plt.xlabel("Weighted Grade (%)")
|
||||
plt.ylabel("Cut-off Grade (%)")
|
||||
plt.grid(True)
|
||||
|
||||
plt.tight_layout()
|
||||
plt.show()
|
Loading…
Add table
Add a link
Reference in a new issue