© Д.А. Шариф, 2007
УДК 622.271 Д.А. Шариф
РЕГУЛЯРНАЯ ПРОВЕРКА КОНЕЧНОГО КОНТУРА РАБОЧЕЙ ЗОНЫ КАРЬЕРА НА ОСНОВЕ АЛГОРИТМА СКОЛЬЗЯЩЕГО КОНУСА
Семинар № 16
В настоящее время с каждым днём обостряется борьба на рынках металлов и горнодобывающих продуктов. С каждым днём появляются новые методы обогащения полезных компонентов руд, появляются гигантские оборудования в карьерах и шахтах. Разумеется, все эти изменения резко влияют на рентабельность проекта карьеров и шахт. Поэтому в современных карьерах невозможно выполнять добычу на основе одного и того же плана, а нужно регулярно проверять степень рентабельности текущего проекта. В зависимости от наблюдаемых изменений на рынках, иногда приходится исправлять проект карьеров, и даже, если необходимо, обновлять проект разработки месторождения полезных ископаемых. В зависимости от приведённых причин, на крупных горнодобывающих предприятиях ежегодно, ежемесячно или даже ежедневно проверяют план работы. Не смотря на то, что период проверки и обновления проекта и плана разработки точно не известен, но эта процедура неизбежна. В последние десятилетия единственным способом проверки конечного контура карьеров является использование компьютерных методов. Основная и классическая цель проектирования рудника может быть определена следующим образом:
Установление окончательных контуров рудника в конце его экономиче-
ской жизни, так, чтобы полная чистая прибыль была максимальна.
Процедуры компьютерного проектирования открытых горных работ, можно разделить на две широких категории: математическая оптимизация и эвристические подходы к моделированию.
Среди нескольких существующих алгоритмов, скользящий конус, благодаря его простоте и ряду хороших качеств широко применяется в разных странах мира, особенно в США. Однако, алгоритм скользящего конуса имеет недостаток - ему не хватает строгого математического доказательства оптимальности решений. Кроме того, выявились некоторые недостатки в применении алгоритма проектированию карьеров для разработки месторождений драгоценных металлов с беспорядочными распределениями концентраций.
Данная работа основана на алгоритме “повторяющейся формулы скользящего конуса“ (Berlanga et all, 1988). Алгоритм состоит в том, что числовое выражение "скользящего конуса” строится с тремя различными вариантами расстояний, как векторов в определенной системе координат.
Алгоритм «скользящего конуса» реализован в компьютерной программе «Atlas». Программа написана на языке QBasic. Находится в отладке версия программы на языке Visual C++ 6.0. После ввода исходных данных программа создает конус на поверхности
очередного блока. Ищутся все выше- ным, месторождение нарезается на
лежащие блоки, попадающие в конус. блоки равного размера, например
Принимается решение об отработке 10-10-10 м, в каждом блоке рассчи-
вышележащих блоков, попавших в ко- тается содержание полезного компо-
нус. Если получена отрицательная нента, создается экономическая мо-
оценка, конус расширяется. В конце дель, состоящая из блоков имеющих
программа вычисляет количество всех положительную оценку. Блокам с ми-
добываемых блоков и дает послойную нимальным экономическим содержа-
распечатку оценок всех блоков. нием полезного компонента приписы-
Как нужно подготовить данные по вается оценка «нуль». Блоки, попа-
месторождению полезных ископаемых, дающие в области вскрышных пород,
чтобы применить алгоритм скользящего получают отрицательную оценку.
конуса? По геологоразведочным дан-
Далее приведен текст компьютерной программы «Atlas».
10 CLS : INPUT "PLEAS ENTER NUMBER OF RAW”; M 20 INPUT "PLEAS ENTER NUMBER OF COLUMN"; N 30 INPUT "PLEAS ENTER NUMBER OF LEVEL"; K1 40 CLS : PRINT "YOUR DATA FILE NAME IS G2.DAT"
50 DIM A(M, N, K1)
60 VALUE = 0: PRINT "PLEAS CHECK YOUR DATA FILE .DO YOU COMPLETE YOUR DATA FILE?(Y/N)"
70 M$ = INKEY$
80 IF M$ = "Y" OR M$ = "y" THEN 150 90 IF M$ = "N" OR M$ = "n" THEN 120 100 GOTO 70 110 CLS
120 CLS : PRINT "YOU SHOULD COMPLETE YOUR DATA FILE": PRINT "YOUR DATA FILE RAW NUMBER="; M; "AND COLUMN NUMBER="; N; "AND LEVEL NUMBER="; K1
130 PRINT "FOR EXIT TYPE N OR COMPLUTE DATA FILE AND TYPE Y?(Y/N)"
131 M$ = INKEY$
132 IF M$ = "Y" OR M$ = "y" THEN 150
133 IF M$ = "N" OR M$ = "n" THEN 140
134 GOTO 131 140 GOTO 1560
150 CLS : PRINT "PLEAS WAIT"
160 OPEN "A:\G2.DAT" FOR INPUT AS #1 170 FOR K = 1 TO K1 175 FOR I = 1 TO M 180 FOR J = 1 TO N 190 IF EOF(1) THEN GOTO 230 200 INPUT #1, A(I, J, K)
210 NEXT J: NEXT I
220 NEXT K
230 CLOSE #1
240 FOR I = 1 TO M
250 FOR J = 1 TO N
260 IF A(I, J, 1) <= 0 THEN 290
270 VALUE = VALUE + A(I, J, 1)
280 A(I, J, 1) = 0
290 NEXT J: NEXT I
291 GOSUB 309: CLS : PRINT "FIRST PART OF CALCULATION FINISHED. DO YOU WANT TO CONTINUE CALCULATION?(Y/N)"
292 M$ = INKEY$
293 IF M$ = "Y" OR M$ = "y" THEN 296
294 IF M$ = "N" OR M$ = "n" THEN 1560
295 GOTO 292
296 GOSUB 541: CLS : PRINT "SECOND PART OF CALCULATION FINISHED.DO YOU WANT TO CONTINUE CALCULATION?(Y/N)"
297 MS = INKEYS
298 IF MS = "Y" OR MS = "y" THEN 301
299 IF MS = "N" OR mS = "n" THEN 1Б60
300 GOTO 297
301 GOSUB 996: CLS : PRINT "THIRD PART OF CALCULATION FINISHED.DO YOU WAHT TO CONTINUE CALCULATION?(Y/N)"
302 MS = INKEYS
303 IF MS = "Y" OR MS = "y" THEN 306
304 IF MS = "N" OR MS = "n" THEN 1Б60 З0Б GOTO З02
З06 GOSUB 1ЗБ1
309 SUM = 0
310 FOR L = 2 TO K1
311 FOR I = L TO M - L + 1 320 FOR J = L TO N - L + 1 330 IF A(I, J, L) <= 0 THEN БЗ1 340 SUM = 0
ЗБ0 FOR D = 1 TO L 360 FOR K = 0 TO L - D 370 FOR B = I - K TO I + K 380 FOR C = J - K TO J + K
390 IF B = I - K + C - J OR B = I - C + J - K OR B = I - C + J + K OR B = I + K + C - J THEN 410 400
GOTO 420
410 SUM = SUM + A(B, C, D)
420 NEXT C: NEXT B: NEXT K: NEXT D
440 IF SUM < 0 THEN БЗ1
4Б0 VALUE = VALUE + SUM
460 FOR D = 1 TO L
470 FOR K = 0 TO L - D
480 FOR B = I - K TO I + K
490 FOR C = J - K TO J + K
Б00 IF B = I - K + C - J OR B = I - C + J - K OR B = I - C + J + K OR B = I + K + C - J THEN Б20
Б10 GOTO БЗ0 Б20 A(B, C, D) = 0
БЗ0 NEXT C: NEXT B: NEXT K: NEXT D БЗ1 PRINT I, J, L: NEXT J: NEXT I: NEXT L Б40 RETURN Б41 SUM = 0
Б42 FOR L = 2 TO K1: FOR I = L TO M - L + 1: FOR J = L TO N - L + 1 Б4З IF A(I, J, L) <= 0 THEN 981
ББ0 IF I > L - 1 AND I < M - L + 1 AND J > L - 1 AND J < N - L + 1 THEN Б70 Б60 GOTO 981
Б70 A1 = I - L + 1: A2 = J - L + 1: A3 = M - L + 1 - I: A4 = N - L + 1 - J
Б80 IF A1 <= A2 AND A1 <= A3 AND A1 <= A4 THEN 620
Б90 IF A2 <= A1 AND A2 <= A3 AND A2 <= A4 THEN 630
600 IF A3 <= A1 AND A3 <= A2 AND A3 <= A4 THEN 640
610 N1 = A4: GOTO 740
620 N1 = A1: GOTO 740
630 N1 = A2: GOTO 740
640 N1 = A3
740 FOR E = 1 TO N1
7Б0 FOR D = 1 TO L
760 K = L - D + E
790 FOR B = I - K TO I + K
800 FOR C = J - K TO J + K
810 IF B = I - K + C - J OR B = I - C + J - K OR B = I - C + J + K OR B = I + K + C - J THEN 830
820 GOTO 840
830 SUM = SUM + A(B, C, D)
840 NEXT C: NEXT B: NEXT D 8Б0 IF SUM < 0 THEN 860 8ББ GOTO 890 860 NEXT E
86Б IF SUM < 0 THEN 981
870 E = E - 1
890 VALUE = VALUE + SUM 900 FOR D = 1 TO L 910 FOR K = 0 TO L - D + E 930 FOR B = I - K TO I + K 940 FOR C = J - K TO J + K
9Б0 IF B = I - K + C - J OR B = I - C + J - K OR B = I - C + J + K OR B = I + K + C - J THEN 970 960 GOTO 980 970 A(B, C, D) = 0
980 NEXT C: NEXT B: NEXT K: NEXT D
981 PRINT I, J, L: NEXT J: NEXT I: NEXT L 99Б RETURN
996 SUM1 = 0
997 FOR L = 2 TO K1: FOR I = L TO M - L + 1: FOR J = L TO N - L + 1
998 IF A(I, J, L) <= 0 THEN 1349
1000 IF J < N - L + 1 AND J > L - 1 THEN 1020
1010 GOTO 1349
1020 J1 = J + 1
1030 FOR D = 1 TO L
1040 K = L - D
10Б0 FOR B = I - K TO I + K
1060 FOR C = J1 TO J1 + K
1070 IF B = I - C + J1 + K OR B = I - K + C - J1 THEN 1090
1080 GOTO 1100
1090 SUM1 = SUM1 + A(B, C, D)
1100 NEXT C: NEXT B: NEXT D
1200 IF SUM1 > 0 THEN 12Б0
1210 IF J1 > L - 1 AND J1 < N - L + 1 THEN 1230
1220 GOTO 1349
1230 J1 = J1 + 1
1231 FOR D = 1 TO L
1232 K = L - D
1233 FOR B = I - K TO I + K
1234 FOR C = J1 TO J1 + K
12ЗБ IF B = I - C + J1 + K OR B = I - K + C - J1 THEN 1237
1236 GOTO 1238
1237 SUM1 = SUM1 + A(B, C, D)
1238 NEXT C: NEXT B: NEXT D 1247 GOTO 1200
12Б0 VALUE = VALUE + SUM1 1260 FOR D = 1 TO L 1270 FOR K = 0 TO L - D 1280 FOR B = I - K TO I + K 1290 FOR C = J - K TO J + K
1300 IF B = I - K + C - J OR B = I - C + J - K OR B = I - C + J + K OR B = I + K + C - J THEN 1320 1310 GOTO 1330 1320 A(B, C, D) = 0
1330 NEXT C: NEXT B: NEXT K: NEXT D
1340 FOR J3 = J + 1 TO J1
1341 FOR D = 1 TO L
1342 K = L - D
1343 FOR B = I - K TO I + K
1344 FOR C = J3 TO J3 + K
1З4Б IF B = I - C + J3 + K OR B = I - K + C - J3 THEN 1347
1346 GOTO 1348
1347 A(B, C, D) = 0
1348 NEXT C: NEXT B: NEXT D: NEXT J3
1349 PRINT I, J, L: NEXT J: NEXT I: NEXT L 13Б0 RETURN
1ЗБ1 SUM2 = 0
1ЗБ2 FOR L = 2 TO K1: FOR I = L TO M - L + 1: FOR J = L TO N - L + 1
1ЗБЗ IF A(I, J, L) <= 0 THEN 1480
1ЗБ8 IF I < M - L + 1 AND I > L - 1 THEN 1360
13Б9 GOTO 1480
1360 I1 = I + 1
1361 FOR D = 1 TO L
1362 K = L - D
1363 FOR B = I1 TO I1 + K
1364 FOR C = J - K TO J + K
1З6Б IF B = I1 + K + C - J OR B = I1 - C + J + K THEN 1367
1366 GOTO 1368
1367 SUM2 = SUM2 + A(B, C, D)
1368 NEXT C: NEXT B: NEXT D
1378 IF SUM2 > 0 THEN 1391
1379 IF I1 > L - 1 AND I1 < N - L + 1 THEN 1381
1380 GOTO 1480
1381 I1 = I1 + 1
1382 FOR D = 1 TO L
1383 K = L - D
1384 FOR B = I1 TO I1 + K 1З8Б FOR C = J - K TO J + K
1386 IF B = I1 + K + C - J OR B = I1 - C + J + K THEN 1388
1387 GOTO 1389
1388 SUM2 = SUM2 + A(B, C, D)
1389 NEXT C: NEXT B: NEXT D
1390 GOTO 1378
1391 VALUE = VALUE + SUM2
1392 FOR D = 1 TO L: FOR K = 0 TO L - D: FOR B = I - K TO I + K: FOR C = J - K TO J + K
1393 IF B = I - K + C - J OR B = I - C + J - K OR B = I - C + J + K OR B = I + K + C - J THEN 1З9Б
1394 GOTO 1396 1З9Б A(B, C, D) = 0
1396 NEXT C: NEXT B: NEXT K: NEXT D
1398 GOTO 1378
1399 SUMO = 1: SUM1 = SUM2
1400 GOTO 12Б0
1401 FOR I3 = I + 1 TO I1
1402 FOR D = 1 TO L
1403 K = L - D
1404 FOR B = I3 TO I3 + K 140Б FOR C = J - K TO J + K
1406 IF B = I3 + K + C - J OR B = I3 - C + J + K THEN 1408
1407 GOTO 1409
1408 A(B, C, D) = 0
1409 NEXT C: NEXT B: NEXT D: NEXT I3 1480 PRINT I, J, L: NEXT J: NEXT I: NEXT L 1490 OPEN "A:\G4.OUT" FOR OUTPUT AS #2 1Б00 FOR K = 1 TO K1
1Б0Б FOR I = 1 TO M 1Б10 FOR J = 1 TO N 1Б20 AS = SPACES(3)
1Б21 LSET AS = STRS(A(I, J, K))
1Б22 IF J = N THEN PRINT #2, AS ELSE PRINT #2, AS;
1БЗ0 NEXT J: NEXT I: NEXT K 1Б40 CLOSE #2
1Б41 CLS : PRINT "CALCULATION FINISHED ,FOR STOP TYPE P AND FOR WATCHING VALUE TYPE V?(P/V)"
1Б42 MS = INKEYS
1Б4З IF MS = "P" OR MS = "p" THEN 1Б60 1Б44 IF MS = "V" OR MS = "v" THEN 1ББ0 1Б4Б GOTO 1Б42 1550 PRINT "VALUE="; VALUE 1560 STOP S2E
— Коротко об авторах--------------------------------------------------
Шариф Джафар Абдо плахи - Московский государственный университет им. М.В. Ломоносова, Геологический факультет.