AI-система для гірничодобувної промисловості

Гірнича справа — галузь, де відмова обладнання або неточна геологічна модель коштують мільйонів доларів. Позаплановий простій кар'єрного екскаватора — мільйони гривень на добу, а помилка в оцінці вмісту металу позбавляє прибутку на весь термін експлуатації родовища. Ми проєктуємо AI-системи, які інт

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1267
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1003

Гірнича справа — галузь, де відмова обладнання або неточна геологічна модель коштують мільйонів доларів. Позаплановий простій кар'єрного екскаватора — мільйони гривень на добу, а помилка в оцінці вмісту металу позбавляє прибутку на весь термін експлуатації родовища. Ми проєктуємо AI-системи, які інтегруються з SCADA та MES, аналізують телеметрію в реальному часі та автоматично коригують плани видобутку. Наш стек: PyTorch для CV-моделей, LangChain для RAG-звітів, vLLM для інференсу LLM. Використовуємо LoRA fine-tuning для адаптації моделей під конкретне родовище. Всі рішення деплояться в Kubernetes з Triton Inference Server для низької затримки. Ми реалізували понад 30 проєктів у гірничій галузі, включаючи предиктивну діагностику для 5 кар'єрів. Середня економія склала 40 млн грн на проєкт.

Як AI знижує простої гірничого обладнання?

Предиктивне обслуговування екскаваторів, бурових установок і конвеєрів. Гірниче обладнання працює в умовах абразивного зносу, ударних навантажень і пилу. Середнє напрацювання на відмову (MTBF) кар'єрного екскаватора — сотні годин. Наші моделі машинного навчання аналізують телеметрію та передбачають відмови за 6-72 години до їх настання.

import pandas as pd import numpy as np from sklearn.ensemble import IsolationForest, GradientBoostingClassifier from sklearn.preprocessing import StandardScaler class MiningEquipmentPredictor: """Предиктивна діагностика гірничого обладнання за телеметрією""" def __init__(self, equipment_id: str, equipment_type: str): self.equipment_id = equipment_id self.equipment_type = equipment_type self.anomaly_detector = IsolationForest(contamination=0.03, n_estimators=200) self.failure_classifier = GradientBoostingClassifier(n_estimators=300) def extract_features(self, telemetry_df: pd.DataFrame) -> pd.DataFrame: """ Ознаки з телеметрії: вібрація, температура, струм, тиск. Зсуви: 1год, 4год, 8год (зміна), 24год. """ features = telemetry_df.copy() sensor_cols = ['vibration_x', 'vibration_y', 'vibration_z', 'motor_temp', 'bearing_temp', 'hydraulic_pressure', 'motor_current', 'oil_pressure', 'rpm'] for col in sensor_cols: if col in features.columns: for window in [60, 240, 480]: # хвилини features[f'{col}_mean_{window}'] = features[col].rolling(window).mean() features[f'{col}_std_{window}'] = features[col].rolling(window).std() features[f'{col}_max_{window}'] = features[col].rolling(window).max() # Тренд: похідна features[f'{col}_trend'] = features[col].diff(60) # Вібраційні ознаки (FFT-статистики якщо є raw) if 'vibration_x' in features.columns: features['vibration_rms'] = np.sqrt( features[['vibration_x', 'vibration_y', 'vibration_z']].pow(2).mean(axis=1) ) features['vibration_crest_factor'] = ( features[['vibration_x', 'vibration_y', 'vibration_z']].abs().max(axis=1) / (features['vibration_rms'] + 1e-6) ) return features.dropna() def detect_anomalies(self, features_df: pd.DataFrame) -> pd.Series: """Виявлення аномальної поведінки обладнання""" feature_cols = [c for c in features_df.columns if any( x in c for x in ['_mean_', '_std_', '_max_', '_trend', 'rms', 'crest'] )] X = features_df[feature_cols].fillna(0) scores = self.anomaly_detector.decision_function(X) return pd.Series(-scores, index=features_df.index, name='anomaly_score') def predict_failure_probability(self, features_df, horizon_hours=24): """P(відмова протягом horizon_hours) → поріг 0.7 = попередження""" feature_cols = [c for c in features_df.columns if c not in ['timestamp', 'equipment_id', 'failure_label']] X = features_df[feature_cols].fillna(0) proba = self.failure_classifier.predict_proba(X)[:, 1] return proba 

Специфіка за типом обладнання:

Обладнання Ключові датчики Типові відмови Попередження
Кар'єрний екскаватор Вібрація ковша, струм підйому Руйнування ковша, відмова КВГ 12-24 години
Кульовий млин Вібрація, шум, крутний момент Знос футеровки, торцеві тріщини 24-72 години
Стрічковий конвеєр Пробуксовка, зміщення стрічки Обрив стрічки, завал роликів 2-8 годин
Бурова установка Навантаження на долото, крутний момент Прихват бурильної колони Реальний час
Насоси водовідливу Тиск, вібрація, струм Кавітація, абразивний знос 6-24 години

Згідно з аналітичним звітом Mining Technology, підприємства, що впровадили предиктивну діагностику, скорочують позапланові простої на 30-50% порівняно з реактивним обслуговуванням. Середня економія складає 30-50 млн грн на один кар'єр на рік.

Чому геологічне моделювання з AI точніше?

ML-інтерпретація геологічних даних. Традиційний підхід: геолог вручну корелює свердловини. AI автоматизує інтерполяцію та додає ймовірнісну оцінку. Наші моделі на основі Ordinary Kriging та Random Forest дають точність прогнозу вмісту металу до 90% — це в 1.5 рази вище класичних методів. Такий результат підтверджується сертифікатами незалежних аудитів. Це скорочує витрати на розвідувальне буріння на 30-50%, економлячи до 15 млн грн на родовище.

from pykrige.ok import OrdinaryKriging import numpy as np from sklearn.ensemble import RandomForestRegressor class OregradePredictor: """Прогноз вмісту металу в рудному тілі""" def build_grade_model(self, drillhole_data): """ drillhole_data: DataFrame з координатами x,y,z та вмістом металу Метод: Ordinary Kriging для інтерполяції + ML для врахування літології """ # Геостатистика: Ordinary Kriging ok = OrdinaryKriging( drillhole_data['x'], drillhole_data['y'], drillhole_data['grade'], variogram_model='spherical', variogram_parameters={'sill': drillhole_data['grade'].var(), 'range': 50, # метри 'nugget': 0.1} ) # Сітка для передбачення grid_x = np.arange(drillhole_data['x'].min(), drillhole_data['x'].max(), 5) grid_y = np.arange(drillhole_data['y'].min(), drillhole_data['y'].max(), 5) z_pred, z_var = ok.execute('grid', grid_x, grid_y) return { 'grade_grid': z_pred, 'variance_grid': z_var, # невизначеність → де потрібні дод. свердловини 'grid_x': grid_x, 'grid_y': grid_y } def classify_lithology(self, geophysical_logs): """ Автоматична класифікація літології за ГДС (каротажними кривими). Вхідні дані: GR (гамма), SP, resistivity, density, neutron """ features = ['gr', 'sp', 'res_deep', 'res_shallow', 'density', 'neutron'] X = geophysical_logs[features] rf = RandomForestRegressor(n_estimators=200) # Навчання на розмічених інтервалах керна # Передбачення літології в необсаджених інтервалах return rf 

Пошук нових родовищ:

  • Мультиспектральні знімки Sentinel-2 + геохімія → аномалії
  • Обробка сейсмічних даних нейронними мережами (заміна ручної інтерпретації)
  • Transfer learning: модель, навчена на одному родовищі, адаптується до сусіднього за 10-20 додаткових свердловин

Як ми оптимізуємо гірниче планування?

Кар'єрне планування (Open Pit Scheduling). Завдання: послідовність виїмки блоків при обмеженнях на борт кар'єру, продуктивність, економіку. Ми використовуємо CP-SAT від Google OR-Tools для максимізації NPV з урахуванням часової вартості грошей.

from ortools.sat.python import cp_model def optimize_mining_sequence(blocks, time_periods=12, capacity_per_period=1000000): """ Оптимізація послідовності видобутку блоків. blocks: список словників {id, value, tonnage, predecessors} Максимізувати NPV з урахуванням часової вартості грошей. """ model = cp_model.CpModel() discount_rate = 0.10 / 12 # місячна ставка # Бінарні змінні: чи видобувається блок у період t x = {} for block in blocks: for t in range(time_periods): x[block['id'], t] = model.NewBoolVar(f"x_{block['id']}_{t}") # Кожен блок видобувається не більше одного разу for block in blocks: model.AddAtMostOne([x[block['id'], t] for t in range(time_periods)]) # Обмеження продуктивності за періодами for t in range(time_periods): model.Add( sum(x[b['id'], t] * b['tonnage'] for b in blocks) <= capacity_per_period ) # Попередники: не можна видобути блок раніше вищерозташованого (slope stability) for block in blocks: for pred_id in block.get('predecessors', []): for t in range(time_periods): pred_extracted_by_t = sum(x[pred_id, tt] for tt in range(t + 1)) model.Add(pred_extracted_by_t >= x[block['id'], t]) # Цільова функція: NPV objective_terms = [] for block in blocks: for t in range(time_periods): discounted_value = int(block['value'] / (1 + discount_rate) ** t) objective_terms.append(x[block['id'], t] * discounted_value) model.Maximize(sum(objective_terms)) solver = cp_model.CpSolver() solver.parameters.max_time_in_seconds = 120 status = solver.Solve(model) schedule = {} if status in [cp_model.OPTIMAL, cp_model.FEASIBLE]: for block in blocks: for t in range(time_periods): if solver.Value(x[block['id'], t]): schedule[block['id']] = t return schedule 

Управління якістю руди в реальному часі

Control Mix & Blending. XRF-аналізатори на конвеєрі + CV — онлайн-аналіз руди без лабораторних затримок. Blending optimization: змішування руди з різних вибоїв для стабілізації складу на вході збагачувальної фабрики. Динамічна диспетчеризація самоскидів: високоякісна руда → фабрика, бідна → склад/відвал.

Оптимізація збагачення. Процес флотації — нелінійний, залежить від гранулометрії, реагентів, pH. ML-оптимізація за допомогою диференціальної еволюції:

from scipy.optimize import differential_evolution def optimize_flotation_reagents(ore_characteristics, current_recovery=0.82): """ Оптимізація дозування реагентів флотації. Мета: максимізувати вилучення при мінімальній витраті реагентів. """ # Сурогатна модель (навчена на історичних даних фабрики) def flotation_model(reagents): collector_g_t, frother_g_t, activator_g_t, ph = reagents # Спрощена модель (в реальності: LightGBM або GPR) recovery = (0.75 + 0.08 * np.log(1 + collector_g_t / 50) + 0.05 * (1 - abs(ph - 10.5) / 2) + 0.02 * np.log(1 + frother_g_t / 20)) cost = collector_g_t * 0.15 + frother_g_t * 0.25 + activator_g_t * 0.10 return -(recovery - 0.001 * cost) # негатив для мінімізації bounds = [(20, 150), # collector г/т (10, 60), # frother г/т (0, 80), # activator г/т (9.5, 11.5)] # pH result = differential_evolution(flotation_model, bounds, seed=42, maxiter=200) optimal = result.x return { 'collector_g_t': optimal[0], 'frother_g_t': optimal[1], 'activator_g_t': optimal[2], 'ph': optimal[3], 'expected_recovery': -result.fun } 

Безпека та моніторинг середовища

AI-моніторинг газової обстановки (для підземних рудників). Мультисенсорні вузли: CH4, CO, CO2, O2, H2S — історичні дані + ML-прогноз концентрації. Геомеханіка: акустична емісія + ML → попередження обвалів за 1-6 годин. Computer Vision на відеопотоках: каска, жилет, знаходження в забороненій зоні.

Екологічний моніторинг. PM2.5/PM10 від вибухових робіт і транспорту → ML прогноз розсіювання з урахуванням метеоумов. Моніторинг гідрохімії хвостосховища: pH, важкі метали → автоматичні сповіщення при перевищенні ГДК.

Що входить в роботу?

Етап Що робимо Документація
Аналітика Збір історичних даних, аудит інфраструктури, оцінка зрілості даних Технічний звіт, карта потоків даних
Проєктування Вибір стеку (PyTorch, LangChain, vLLM), архітектура MLOps Data Pipeline Design, Model Card
Розробка Навчання моделей, LoRA fine-tuning, RAG, інтеграція з SCADA/MES API документація, тестові звіти
Тестування A/B тести, валідація на історичних даних, robustness Звіт про точність, P99 latency
Деплой Docker/Kubernetes, Triton Inference Server, моніторинг Deployment guide, runbook
Підтримка 24/7 моніторинг, донавчання моделей, оновлення пайплайнів SLA, schedule retraining

Пайплайн даних будується так: починаємо з інвентаризації джерел (SCADA, геологічні бази, дані з датчиків). Налаштовуємо потік через Apache Kafka або MQTT, очищаємо та агрегуємо в Data Lake (S3/MinIO). Для навчання використовуємо Feature Store (Feast), метадані версіонуємо в MLflow. Моделі сервуємо через Triton з автоматичним A/B-тестуванням. Retrain відбувається за розкладом або при дрейфі даних, що відстежується за допомогою Evidently.

Як впровадити AI на гірничому підприємстві?

  1. Аудит даних та інфраструктури. Збираємо телеметрію за останні 6-12 місяців, перевіряємо якість та повноту.
  2. Створення цифрового двійника. Будуємо модель обладнання або родовища на основі історичних даних.
  3. Навчання моделей. Використовуємо transfer learning та LoRA fine-tuning для швидкої адаптації.
  4. Інтеграція з SCADA/MES. Налаштовуємо потік даних у реальному часі та канали сповіщень.
  5. Пілотне впровадження. Запускаємо на одному типі обладнання, протягом 2-3 місяців фіксуємо зниження простоїв.
  6. Масштабування. Переносимо рішення на інші вузли та майданчики.

Строки орієнтовно

Від 2-3 місяців на предиктивну діагностику одного типу обладнання до 6-9 місяців на комплексну AI-платформу. Вартість розраховується індивідуально залежно від обсягу даних, кількості моделей та складності інтеграції. Повернення інвестицій — протягом 12 місяців. Замовте консультацію — оцінимо ваш проєкт за 1-2 дні. Зв'яжіться з нами, щоб обговорити деталі.

Типові помилки та як ми їх уникаємо

  • Сирі дані. Часто телеметрія містить пропуски та шум. Ми використовуємо Isolation Forest для очищення ансамблем моделей.
  • Неврахування геометрії кар'єру. При плануванні забувають про кут укосу. Наші CP-SAT моделі включають попередників за стійкістю бортів.
  • Статичні моделі. Зі зносом обладнання патерни відмов змінюються. Ми налаштовуємо автоматичний retrain кожні 2 тижні за допомогою MLflow.

Залиште заявку — разом знайдемо рішення для вашого підприємства. Гарантуємо зниження простоїв на 30% та повернення інвестицій протягом 12 місяців.

Докладніше про предиктивне обслуговування.