АШИГТ МАЛТМАЛЫН БАЯЖУУЛАЛТЫН ТЕХНИК, ТЕХНОЛОГИ

Ашигт малтмалын баяжуулалтын чиглэлээр сурч буй оюутан сурагчид, залуу инженерүүдэд зориулав.

Wednesday, June 5, 2019

Баяжуулагч инженерүүдэд зориулсан Python N9 (Python for Mineral Processing Engineers)


 Matplotlib ашиглан тээрэм дэх ган бөөрөнцөгийн хөдөлгөөний  динамикийг тээрмийн хүрдний эргэлтээс хамааруулан Python-оор загварчлав.
Тээрмийн хамгийн гадна давхрагын бөөрөнцөгийн хөдөлгөөний траектори, тасрах өнцөг, мөн унах байршлыг янз бүрийн эргэлийн хурданд (75%, 80%, 87%) тооцож хөдөлгөөнт зургаар үзүүлллээ..
 
 










Tuesday, June 4, 2019

Баяжуулагч инженерүүдэд зориулсан Python №8 (Python for Mineral Processing Engineers)


Нүүрс баяжуулах үйлдвэрийн тэжээлийн нүүрсний оновчтой хольцийг (шихта)
тогтоох нь

Нүүрс баяжуулах үйлдвэрийн (НБҮ) технологийн үзүүлэлт анхдагч нүүрсний чанараас ихээхэн хамаардаг бөгөөд хэд хэдэн уурхай, эсвэл мөргөцөг ашигладаг ихэнх уурхайд чанарын холилт (шихт) хийдэг.
НБҮ-ийн  тэжээлийн чанарын холилтыг ухаалагаар хийх нь үйлдвэрийн үр ашгийг дээшлүүлэх, технологийн үзүүлэлтүүдийг оновчлох нэг арга зам бөгөөд тэжээлийн оновчтой холилтын тооцоог математикийн аргуудаар тооцдог.
Иймэрхүү оновчлолын бодлогыг бодоход математикийн шугаман программчлалын (ШП)  аргыг хэрэглэдэг бөгөөд ба олон хэмжигдэхүүнтэй үед ердийн аргаар (симплекс арга, М-арга) бодоход цаг хугацаа их шаарддагаас гадна жаахан төвөгтэй.
Харин инженерийн бэлэн пакетууд гарч ирснээр шугаман программчлалыг практикт хэрэглэх хялбар болж байгаа юм. Ийм пакетын нэг нь PythonPuLP бөгөөд энэ пакетыг ашиглан НБҮ-ын тэжээлийг оновчтой холилтыг хэрхэн шийдэхийг авч үзье.
Бодлого  1. НБҮ-т хэд хэдэн уурхайгаас (1, 2, 3) нүүрс боловсруулж байгаа ба технологийн туршилтаар 1-р уурхайн нүүрсний баяжмалын гарц γ1=55%, түүний  үнслэг A1 = 12%,  2-р уурхайн нүүрсний баяжмалын гарц γ2=75%, түүний  үнслэг A2 = 8.5%, 3-р уурхайн нүүрсний баяжмалын гарц γ3=65%, түүний  үнслэг A3=9% байсан бол НБҮ-ийн баяжмалын үнслэг 9% байх нөхцөлөөр хамгийн их баяжмалын гарцыг хангах холилтын тооцоог хийх. Үүнд: НБҮ-ийн хоногийн бүтээл 5000 т ба уурхайнуудын нүүрс гаргах хязгаарууд:

500  Q1 ≤ 1000

1000  Q2≤ 5000

1000  Q3 ≤ 2000

БОДОЛТ:

Энэхүү бодлогын тавилыг дараах байдлаар бичиж болох ба PulP пакетыг ашиглаж бичсэн кодыг доор үзүүлэв.




500 Q1 ≤ 1000
1000 Q25000
1000 Q3 2000



#Нvvрсний хольцийг шугаман програмчлалын аргаар тогтоох

import numpy as np
Q=np.array([0.,0.,0.])

# Conc. Yield by mine
Y=[55,75,65]
#Ash content in Concentrate
A=[14,7.5,9]

G=np.asarray(Y)
A=np.asarray(A)
Az=8.5
Qtotal=5000

prob=LpProblem("Coal_Mix", LpMaximize)
Q1=LpVariable("Q1",500,1000)
Q2=LpVariable("Q2",1000,5000)
Q3=LpVariable("Q3",1000,2000)

prob=LpProblem("Coal_Mix", LpMaximize)
prob+=Y[0]/100*Q1+Y[1]/100*Q2+Y[2]/100*Q3
prob+=Q1+Q2+Q3==Qtotal
prob+=(A[0]*Q1+A[1]*Q2+A[2]*Q3)<=Az*Qtotal

prob.writeLP("Coal_Mix.lp")
prob.solve()

print("Status:", LpStatus[prob.status])
i=0
for v in prob.variables():
    Q[i]= v.varValue
    print(v.name, "=", v.varValue)
    i+=1

Aopt=sum(Q*A)/sum(Q)
print("Conc. Ash= ",Aopt)

Энэхүү бодлогын оновчтой шийд нь:
Q1=500 тн
Q2=3500 тн
Q3=1000 тн болох ба НБҮ -ын баяжмалын оновчтой гарц – γ= 71% баяжмалын чанар A=8.5% болохыг амархан шалгаж болно.

                                                           
Бодлого  2. НБҮ-т хэд хэдэн уурхайгаас (1, 2, 3) нүүрс боловсруулж байгаа ба уурхай 1 ын олборлолт, тээврийн зардал z1=-2500/т , уурхай 2 ынх z2=3500/т, уурхай 3 ынх z3=2250/т  тус тус ба  1-р уурхайн нүүрсний үнслэг - A1 = 34%,  2-р уурхайнх A2 =21%, 3-р уурхайнх A3 =28% байгаа бол НБҮ-т орох тэжээлийн нүүрсний үнслэг 25% байх нөхцөлөөр хамгийн бага зардалтайгаар холилтын тооцоог хийх. Үүнд: НБҮ-ийн хоногийн бүтээл ба уурхайнуудын нүүрс гаргах хязгаарууд дээрх бодлоготой адил.


500 Q1 1000
1000 Q25000
1000 Q3 2000

БОДОЛТ:
Оновчлолын бодлогын тавил:



#Нvvрсний хольцийг шугаман програмчлалын аргаар тогтоох

Q=np.array([0.,0.,0.])

# Mining & Transportation cost by mine
z=[2500,3250,2250]
#Ash content in Feed
A=[34,21,28]

z=np.asarray(C)
A=np.asarray(A)
Az=25
Qtotal=5000

prob=LpProblem("Coal_Mix", LpMaximize)
Q1=LpVariable("Q1",500,1000)
Q2=LpVariable("Q2",1000,5000)
Q3=LpVariable("Q3",1000,3000)

prob=LpProblem("Coal_Mix", LpMinimize)
prob+=z[0]/100*Q1+z[1]/100*Q2+z[2]/100*Q3
prob+=Q1+Q2+Q3==Qtotal
prob+=(A[0]*Q1+A[1]*Q2+A[2]*Q3)==Az*Qtotal

prob.writeLP("Coal_Mix.lp")
prob.solve()

print("Status:", LpStatus[prob.status])
i=0
for v in prob.variables():
    Q[i]= v.varValue
    print(v.name, "=", np.round(v.varValue,0))
    i+=1
      
Aopt=sum(Q*A)/sum(Q)
print("Feed Ash= ",Aopt)


Энэхүү бодлогын оновчтой шийд нь
Q1=500 тн
Q2=2571 тн
Q3=1929 тн болох ба НБҮ -ын тэжээлийн үнслэг =25% болохыг амархан шалгаж болно.

Энэ мэтчилэнгээр өөрсдийн уурхайн хувьд уурхай шугаман программчлалыг ашиглан  уурхай болон  НБҮ-ийн үйл ажиллагааг оновчлож болно.


Monday, April 8, 2019

Баяжуулагч инженерүүдэд зориулсан Python №7 (Python for Mineral Processing Engineers)



Илүүдэл мэдээлэлээрбаяжуулалтын масс-балансыг бодох ба хэмжилтийн алдааг засварлах нь   

Баяжуулах процесс, технологийн схемийн балансыг тооцоход сорьцлолт, хэмжилт, химийн шинжилгээний үр дүнгүүд тодорхой алдаатай санамсаргүй хэмжигдэхүүн байдаг.
Иймээс    балансын тооцооны үед бүтээгдэхүүний тоо хэмжээ, гарц, металл авалт зэрэг нь мөн л алдаатаЙ байдаг.
Баяжуулалтын алдарт ном болох В.А.Уйлссын Эрдэс боловсруулалтын технологи 2006 оны 7 дахь хэвлэлд байдаг нэгэн жишээг Python ашиглан хэрхэн бодох зөвөлгөөг өгье. Өмнө нь ийм төрлийн бодлогыг MSExcel, HPPrime Graphing ашиглан бодох аргачлалыг өгч байсан билээ.

Энэ жишээгээр баяжмал, хаягдлын гарцыг (y1, y2) олох ба харин үүнийг олоход бид мэднэ.. 2-хон үл мэдэгчтэй тэгшитгэл бодох  шаардлагатайг бид мэднэ.
Гэвч тэжээл, баяжмал, хаягдалд даруй 6 металл тодорхойлсон байгаа бөгөөд дурын металлын агуулгаар материалын балансын тэгшитгэл зохиож гарцуудыг олж болно.
Харамсалтай нь металл тус бүрийг ашиглаж гаргасан бүтээгдэхүүний гарц, цаашлаад металл авалт энэ тэр нь хоорондоо зөрөөтэй байгааг ажиглаж болно. Энэ нь нөгөөх санамсаргүй алдаатай холбоотой юм.
Харин бүх тодорхойлогдсон металлын агуулгуудыг ашиглан балансын тэгшитгэлийг бичвэл:
  ci y1 + ti (1-y1 ) fi = δi                                                 /1/
Үүнд: ci , ti ,   fi  - баяжмал, хаягдал ба тэжээлийн дээжинд тодорхойлогдсон металлын агуулгууд (i=1..m).
            δi  - балансын алдаанууд
            Алдаануудын квадратуудын нийлбэр хамгийнбага байх зарчмаар гарцуудыг олох ерөнхий томьёог матриц хэлбэрээр бичвэл:
            [Y]=[BT x B]-1[B x B0]                            /2/
ба энд:
            B=(citi)
            B0=(fiti)
            BT эргүүлсэн B матриц   
           
Python-ы өгөгдөл дараах хэлбэртэй.

Data={'metall':['Sn','Fe','SiO2','S','As','TiO2'],
             'Feed':[21.9,3.46,58,0.11,0.36,4.91],
            'Conc':[43,5.5,25.1,0.12,0.38,9.24],
            'Tail':[6.77,1.76,75.3,0.09,0.34,2.07]}
           
Томьёо /2/ -ыг кодод хөрвүүлэн бичвэл:
df= pd.DataFrame(Data)
f=np.array(df.Feed)
c=np.array(df.Conc)
t=np.array(df.Tail)
B=c-t
B0=f-t
B1=B*B
B2=B*B0
C=B2.sum()/B1.sum()  #Concentrate Yield
T=1-C # Tailings yield

Дараа нь Лагранжийн үржвэрээр агуулгуудыг засварлана.

La=1+C**2+T**2
delta=f-C*c-T*t
delta=delta/La
# Corrected Contents by Lagrang Method
f=f-delta
c=c+delta*C
t=t+delta*T
#-----------------------------------------------------------------------------
rec=c*C*100/f   # Recovery of metals in Conc.



                                   Сорьцлолтын үр дүн
metall
Feed
Conc
Tail
Sn
21.9
43
6.77
Fe
3.46
5.5
1.76
SiO2
58
25.1
75.3
S
0.11
0.12
0.09
As
0.36
0.38
0.34
TiO2
4.91
9.24
2.07

y1= 37.0 %,  y2 =63.0%

Засварласан агуулгууд

Metall
Feed
Conc
Tail
Rec
Sn
20.78
43.41
7.47
77.35
Fe
3.25
5.58
1.89
63.44
SiO2
57.16
25.41
75.83
16.46
S
0.1
0.12
0.09
43.4
As
0.36
0.38
0.34
39.59
TiO2
4.79
9.28
2.15
71.78