מערכת AI לתעשיית הכרייה: תחזוקה חזויה ואופטימיזציה

תעשיית הכרייה מפסידה מיליונים בשל השבתות ציוד בלתי מתוכננות ומודלים גיאולוגיים לא מדויקים. אנחנו בונים מערכות AI שמשתלבות עם SCADA ו-MES, מנתחות טלמטריה בזמן אמת ומתאימות אוטומטית את תוכניות ההפקה. הצוות שלנו מספק פרויקטים מסוג מפתח-ביד—מביקורת ועד הטמעה ותמיכה שוטפת—ומבטיח פתרון אמין שגדל עם העסק שלכם.

תחומי פיתוח AI

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1365
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

אנו משלבים מערכות AI בפעולות כרייה שחותכות עלויות על ידי חיזוי תקלות ציוד ושיפור מודלים גיאולוגיים. עם ניסיון של למעלה מ-10 שנים ויותר מ-30 פרויקטים שהושלמו, חסכנו ללקוחות בממוצע 360–520 אלף דולר לפרויקט. השבתה לא מתוכננת של מחפר בור יכולה לעלות עד 9–13 אלף דולר לשעה, ושגיאה בהערכת דרגת מתכת יכולה למחוק רווחים לכל חיי המכרה. אנו מתכננים מערכות AI שמשתלבות עם SCADA ו-MES, מנתחות טלמטריה בזמן אמת, ומתאימות אוטומטית תוכניות כרייה. המחסנית שלנו: PyTorch למודלי CV, LangChain לדוחות RAG, vLLM להסקת LLM. אנו משתמשים בכיוונון עדין LoRA כדי להתאים מודלים למרבץ ספציפי. כל הפתרונות נפרסים על Kubernetes עם Triton Inference Server לשהות נמוכה.

כיצד AI מפחית השבתות ציוד כרייה

קוד: מסווג תחזוקה חזויה
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

פרטים לפי סוג ציוד:

טבלת תקלות ציוד
ציוד חיישנים מרכזיים תקלות אופייניות זמן התראה
מחפר בור רעידות דלי, זרם הרמה כשל דלי, כשל KVH 12-24 שעות
טחנת כדורים רעידות, רעש, מומנט שחיקת בטנה, סדקים בקצוות 24-72 שעות
מסוע רצועה החלקת רצועה, חוסר יישור קריעת רצועה, חסימת גלגלת 2-8 שעות
מקדחה עומס מקדח, מומנט תקיעת צינור קידוח בזמן אמת
משאבת ניקוז לחץ, רעידות, זרם קוויטציה, שחיקה שוחקת 6-24 שעות

לפי דוח אנליטי של Mining Technology, ארגונים שיישמו אבחון חזוי מפחיתים השבתות לא מתוכננות ב-30-50% בהשוואה לתחזוקה תגובתית. החיסכון הממוצע הוא 300–500 אלף דולר לבור פתוח בשנה.

מדוע מודלים גיאולוגיים מבוססי AI מדויקים פי 1.5 משיטות קלאסיות

פירוש נתונים גיאולוגיים באמצעות ML. גישה מסורתית: גיאולוג מתאם קידוחים ידנית. AI הופך את האינטרפולציה לאוטומטית ומוסיף הערכה הסתברותית. המודלים שלנו המבוססים על Ordinary Kriging ו-Random Forest משיגים דיוק חיזוי דרגת מתכת של עד 90% — פי 1.5 גבוה יותר משיטות קלאסיות. תוצאה זו מאושרת על ידי תעודות ביקורת עצמאיות. זה מפחית עלויות קידוח חיפוש ב-30-50%, וחוסך עד 135–195 אלף דולר למרבץ.

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 + גיאוכימיה → אנומליות
  • עיבוד נתונים סייסמיים עם רשתות נוירונים (החלפת פירוש ידני)
  • למידת העברה: מודל שאומן על מרבץ אחד מסתגל למרבץ שכן לאחר 10-20 קידוחים נוספים

כיצד אנו מייעלים תכנון כרייה

תזמון בור פתוח. בעיה: קביעת רצף חציבת בלוקים עם אילוצים על שיפועי בור, כושר ייצור וכלכלה. אנו משתמשים ב-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

ניהול איכות עפרות בזמן אמת

בקרת ערבוב ומיזוג. מנתחי XRF על מסוע + CV — ניתוח עפרות מקוון ללא עיכובי מעבדה. אופטימיזציית ערבוב: ערבוב עפרות מפנים שונים לייצוב הרכב בכניסה למפעל העיבוד. שיגור משאיות דינמי: עפרות בדרגה גבוהה → מפעל, עפרות בדרגה נמוכה → ערימה/מזבלה.

אופטימיזציית עיבוד. תהליך הציפה הוא לא-ליניארי, תלוי בגודל חלקיקים, ריאגנטים, 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 שעות מראש. מערכת ראייה ממוחשבת שלנו משפרת בטיחות כרייה על ידי זיהוי קסדה, אפוד, ואזור אסור בזרמי וידאו.

ניטור סביבתי. PM2.5/PM10 מפיצוצים ותחבורה → חיזוי פיזור ML עם נתונים מטאורולוגיים. ניטור הידרוכימיה של סכר פסולת: pH, מתכות כבדות → התראות אוטומטיות בחריגה מריכוז מרבי מותר.

MLOps לכרייה: ייעול פריסת מודלים

אנו מיישמים MLOps לכרייה כדי להפוך אימון, פריסה וניטור מודלים לאוטומטיים. הצינור שלנו משתמש ב-Feature Store (Feast), מטא-דאטה של גרסאות ב-MLflow, ו-Triton Inference Server עם בדיקות A/B אוטומטיות. זה מבטיח AI אמין וניתן להרחבה בייצור.

דיווח RAG לכרייה: ניתוח מסמכים מבוסס AI

מערכת RAG שלנו לדיווח כרייה מייצרת דוחות מקיפים ממסמכים גיאולוגיים, יומני קידוח ויומני ציוד. באמצעות LangChain ומסד נתונים וקטורי, היא עונה על שאילתות בשפה טבעית על פעולות המכרה, ומפחיתה את זמן הדיווח ב-70%.

היקף העבודה

שלבי פרויקט
שלב מה אנו עושים תיעוד
אנליטיקה איסוף נתונים היסטוריים, ביקורת תשתית, הערכת בשלות נתונים דוח טכני, מפת זרימת נתונים
עיצוב בחירת מחסנית (PyTorch, LangChain, vLLM), עיצוב ארכיטקטורת MLOps עיצוב צינור נתונים, כרטיס מודל
פיתוח אימון מודלים, כיוונון עדין LoRA, RAG, אינטגרציה עם SCADA/MES תיעוד API, דוחות בדיקה
בדיקות בדיקות A/B, ולידציה על נתונים היסטוריים, חוסן דוח דיוק, שהות P99
פריסה Docker/Kubernetes, Triton Inference Server, ניטור מדריך פריסה, runbook
תמיכה ניטור 24/7, אימון מחדש, עדכוני צינור SLA, לוח זמנים לאימון מחדש

צינור הנתונים בנוי כך: אנו מתחילים במלאי מקורות (SCADA, מסדי נתונים גיאולוגיים, נתוני חיישנים). זרם דרך Apache Kafka או MQTT, ניקוי ואגרגציה ב-Data Lake (S3/MinIO). לאימון אנו משתמשים ב-Feature Store (Feast), מטא-דאטה של גרסאות ב-MLflow. מודלים מוגשים דרך Triton עם בדיקות A/B אוטומטיות. אימון מחדש מתרחש לפי לוח זמנים או על סמך סחיפת נתונים המנוטרת עם Evidently.

כיצד לפרוס AI במפעל כרייה

  1. ביקורת נתונים ותשתית. איסוף טלמטריה מ-6-12 החודשים האחרונים, בדיקת איכות ושלמות.
  2. בניית תאום דיגיטלי. מודל ציוד או מרבץ על בסיס נתונים היסטוריים.
  3. אימון מודלים. שימוש בלמידת העברה וכיוונון עדין LoRA להתאמה מהירה.
  4. אינטגרציה עם SCADA/MES. הגדרת זרמי נתונים בזמן אמת וערוצי התראות.
  5. פריסת פיילוט. השקה על סוג ציוד אחד, תוך 2-3 חודשים תיעוד הפחתת השבתות.
  6. הרחבה. פריסה לצמתים ואתרים נוספים.

לוח זמנים משוער

מ-2-3 חודשים לאבחון חזוי של סוג ציוד אחד ועד 6-9 חודשים לפלטפורמת AI מקיפה. העלות מחושבת באופן פרטני לפי נפח נתונים, מספר מודלים ומורכבות אינטגרציה. ROI תוך 12 חודשים. בקשו ייעוץ — נעריך את הפרויקט שלכם תוך 1-2 ימים. צרו קשר לדיון בפרטים.

טעויות אופייניות וכיצד אנו נמנעים מהן

  • נתונים גולמיים. טלמטריה מכילה לעיתים קרובות פערים ורעש. אנו משתמשים ב-Isolation Forest לניקוי עם אנסמבל של מודלים.
  • התעלמות מגיאומטריית הבור. תכנון שוכח לעיתים קרובות את זווית השיפוע. מודלי CP-SAT שלנו כוללים קודמים ליציבות שיפוע.
  • מודלים סטטיים. דפוסי תקלות משתנים עם שחיקת ציוד. אנו מגדירים אימון מחדש אוטומטי כל שבועיים באמצעות MLflow.

שלחו בקשה — יחד נמצא פתרון למפעל שלכם. אנו מבטיחים הפחתה של 30% בהשבתות ו-ROI תוך 12 חודשים.

למדו עוד על תחזוקה חזויה בוויקיפדיה.