AI-система разведки месторождений

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
AI-система разведки месторождений
Сложная
от 1 недели до 3 месяцев
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    853
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

AI-система геологоразведки и поиска месторождений

Стоимость разведочной скважины — $500K–5M. Из 1000 потенциальных объектов до добычи доходят 1–3. AI снижает число «пустых» скважин, направляя геологоразведку туда, где вероятность нахождения руды максимальна.

Анализ геопространственных данных

Предикторы минерализации:

Месторождение — результат пересечения нескольких геологических факторов. ML находит комбинации признаков, предсказывающие рудные тела:

import numpy as np
import pandas as pd
import rasterio
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import StandardScaler

class MineralProspectivityModel:
    """
    Минерально-перспективная модель для поиска оруденения.
    Входные данные: геофизика, геохимия, дистанционное зондирование, структурная геология.
    """

    def prepare_features(self, geodatasets: dict) -> pd.DataFrame:
        """
        geodatasets: словарь {layer_name: raster_path}
        Слои: magnetic_anomaly, gravity, dem, radiometry_k, radiometry_th,
              geochemistry_cu, geochemistry_au, fault_distance, lithology_encoded
        """
        feature_arrays = {}
        for layer_name, raster_path in geodatasets.items():
            with rasterio.open(raster_path) as src:
                data = src.read(1).astype(float)
                data[data == src.nodata] = np.nan
                feature_arrays[layer_name] = data.flatten()

        features_df = pd.DataFrame(feature_arrays)

        # Производные признаки: градиенты магнитного поля
        if 'magnetic_anomaly' in features_df.columns:
            features_df['mag_gradient'] = np.gradient(
                features_df['magnetic_anomaly'].values
            )

        # Расстояние до известных разломов (проводящие пути флюидов)
        # fault_distance уже нормализовано в метрах

        return features_df.dropna()

    def train_prospectivity(self, features_df, known_deposits_mask):
        """
        known_deposits_mask: бинарный массив — известные месторождения (позитивы)
        Обучение на балансированной выборке: positive = известные, negative = геологически бесперспективные
        """
        from imblearn.over_sampling import SMOTE

        X = features_df.values
        y = known_deposits_mask

        # Баланс классов: позитивов мало
        sm = SMOTE(sampling_strategy=0.3, random_state=42)
        X_res, y_res = sm.fit_resample(X, y)

        scaler = StandardScaler()
        X_scaled = scaler.fit_transform(X_res)

        model = RandomForestClassifier(
            n_estimators=500, max_depth=12,
            min_samples_leaf=5, n_jobs=-1, random_state=42
        )
        model.fit(X_scaled, y_res)

        return model, scaler

Типы входных данных и их ценность:

Источник данных Разрешение Глубина проникновения Ценность для поиска
Аэромагнитная съёмка 50–200 м 500–3000 м Контуры тел, разломы
Гравиметрия 200–500 м 5–10 км Тела базитов, соли
Sentinel-2 SWIR 20 м Поверхность Гидроксилы, глины
ASTER TIR 90 м Поверхность Минеральный состав
Геохимия почв/потоков Точки отбора 1–2 м Прямые индикаторы
CSAMT/MT Профили 1–5 км Проводящие зоны

Обработка геофизических данных

Сейсмоинтерпретация нейронными сетями:

Ручная интерпретация сейсмограмм занимает недели. CNN автоматизирует выделение горизонтов и разломов:

import torch
import torch.nn as nn

class SeismicHorizonPicker(nn.Module):
    """
    U-Net для автоматического выделения сейсмических горизонтов.
    Вход: 2D сейсмическая секция [H x W]
    Выход: маска горизонтов [H x W]
    """

    def __init__(self):
        super().__init__()
        # Encoder
        self.enc1 = self._double_conv(1, 64)
        self.enc2 = self._double_conv(64, 128)
        self.enc3 = self._double_conv(128, 256)
        self.pool = nn.MaxPool2d(2)

        # Bottleneck
        self.bottleneck = self._double_conv(256, 512)

        # Decoder
        self.up3 = nn.ConvTranspose2d(512, 256, 2, 2)
        self.dec3 = self._double_conv(512, 256)
        self.up2 = nn.ConvTranspose2d(256, 128, 2, 2)
        self.dec2 = self._double_conv(256, 128)
        self.up1 = nn.ConvTranspose2d(128, 64, 2, 2)
        self.dec1 = self._double_conv(128, 64)

        self.out = nn.Conv2d(64, 1, 1)

    def _double_conv(self, in_ch, out_ch):
        return nn.Sequential(
            nn.Conv2d(in_ch, out_ch, 3, padding=1), nn.BatchNorm2d(out_ch), nn.ReLU(),
            nn.Conv2d(out_ch, out_ch, 3, padding=1), nn.BatchNorm2d(out_ch), nn.ReLU()
        )

    def forward(self, x):
        e1 = self.enc1(x)
        e2 = self.enc2(self.pool(e1))
        e3 = self.enc3(self.pool(e2))
        b = self.bottleneck(self.pool(e3))
        d3 = self.dec3(torch.cat([self.up3(b), e3], 1))
        d2 = self.dec2(torch.cat([self.up2(d3), e2], 1))
        d1 = self.dec1(torch.cat([self.up1(d2), e1], 1))
        return torch.sigmoid(self.out(d1))

Обработка каротажных данных (Well Log Analysis):

  • Автоматическая корреляция пластов между скважинами: DTW (Dynamic Time Warping) на кривых GR, SP, resistivity
  • Литологическая классификация: Random Forest на комплексе ГИС → 10–15 литотипов
  • Оценка пористости и нефтенасыщенности: нейронная сеть на Core → Log (calibration)

Вероятностная оценка ресурсов

Monte Carlo моделирование запасов:

JORC/CRIRSCO требуют указания неопределённости. ML + MC даёт диапазон вместо точечной оценки:

from scipy.stats import norm, lognormal
import numpy as np

def estimate_resources_montecarlo(
    kriging_grades, kriging_variances,
    density=2.8, n_simulations=10000
):
    """
    Оценка металлических ресурсов с неопределённостью.
    kriging_grades: сетка средних содержаний по блокам
    kriging_variances: дисперсия кригинга по блокам
    """
    block_volume_m3 = 10 * 10 * 5  # 10x10x5 м блоки
    results = []

    for sim in range(n_simulations):
        # Симулировать содержание в каждом блоке
        simulated_grades = np.random.normal(
            loc=kriging_grades,
            scale=np.sqrt(kriging_variances)
        )
        simulated_grades = np.clip(simulated_grades, 0, None)

        # Подсчёт металла
        tonnage = kriging_grades.size * block_volume_m3 * density / 1000  # тонны
        metal_tonnes = tonnage * np.mean(simulated_grades) / 100

        results.append(metal_tonnes)

    p10 = np.percentile(results, 10)
    p50 = np.percentile(results, 50)
    p90 = np.percentile(results, 90)

    return {'P10': p10, 'P50': p50, 'P90': p90,
            'uncertainty_ratio': (p90 - p10) / p50}

Дистанционное зондирование в геологоразведке

Гиперспектральный анализ:

AVIRIS, HyMap, PRISMA: 200+ спектральных каналов → минеральная карта поверхности:

  • SWIR (2.0–2.5 мкм) → каолинит, иллит, монтмориллонит (гидротермальная переработка = индикатор оруденения)
  • SAM (Spectral Angle Mapper) + нейронная сеть для точного разделения минералов
  • Изменения во времени: мультиспектральные серии Sentinel-2 → активные геохимические аномалии по окраске

CV для дешифрирования геологических структур:

  • Распознавание линеаментов (разломов) на ЦМР и снимках: LSD-алгоритм + фильтрация нейросетью
  • 3D-реконструкция геологического обнажения по фотограмметрии (DJI Phantom + RealityCapture → геологическая карта)
  • Автоматическое нанесение элементов залегания по фотографиям керна

Срок разработки: 4–7 месяцев для AI-системы геологоразведки с проспективным моделированием, обработкой геофизических данных и вероятностной оценкой ресурсов.