Розробка AI-системи оптимізації будівельного графіку

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1566 послуг
Розробка AI-системи оптимізації будівельного графіку
Середній
~1-2 тижні
Часті запитання

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

Етапи розробки AI-рішення

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

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

Розробка AI-системи оптимізації будівельного графіка

Будівельний графік – сотні взаємопов'язаних робіт із ресурсними обмеженнями. Традиційні інструменти (MS Project, Primavera P6) потребують ручного планування. AI автоматизує створення оптимального графіка та динамічно перераховує його при відхиленнях.

Автоматичне складання графіка

Resource-Constrained Project Scheduling (RCPSP):

Завдання будівельного розкладу: N робіт з залежними залежностями від predecessor/successor, R видів ресурсів (бригади, крани, опалубка) з обмеженою доступністю → мінімізувати загальний термін.

from ortools.sat.python import cp_model

def schedule_construction_project(tasks, dependencies, resources, resource_limits):
    """
    tasks: [{'id', 'duration_days', 'resource_demand': {type: qty}}]
    dependencies: [(task_a, task_b)] — b начинается после a
    resources: {'rebar_crew': 5, 'formwork_crew': 3, 'tower_crane': 2}
    """
    model = cp_model.CpModel()
    horizon = sum(t['duration_days'] for t in tasks) + 10  # мин. возможный срок

    task_vars = {}
    for task in tasks:
        start = model.NewIntVar(0, horizon, f"start_{task['id']}")
        end = model.NewIntVar(0, horizon, f"end_{task['id']}")
        interval = model.NewIntervalVar(start, task['duration_days'], end, f"interval_{task['id']}")
        task_vars[task['id']] = {'start': start, 'end': end, 'interval': interval}

    # Зависимости (precedence constraints)
    for pred_id, succ_id in dependencies:
        model.Add(task_vars[succ_id]['start'] >= task_vars[pred_id]['end'])

    # Ресурсные ограничения: кумулятивная нагрузка не превышает лимит
    for resource_type, capacity in resource_limits.items():
        intervals = []
        demands = []
        for task in tasks:
            if resource_type in task.get('resource_demand', {}):
                intervals.append(task_vars[task['id']]['interval'])
                demands.append(task['resource_demand'][resource_type])
        if intervals:
            model.AddCumulative(intervals, demands, capacity)

    # Целевая функция: минимизировать время завершения проекта
    project_end = model.NewIntVar(0, horizon, 'project_end')
    model.AddMaxEquality(project_end, [task_vars[t['id']]['end'] for t in tasks])
    model.Minimize(project_end)

    solver = cp_model.CpSolver()
    solver.parameters.max_time_in_seconds = 60.0
    status = solver.Solve(model)

    if status in [cp_model.OPTIMAL, cp_model.FEASIBLE]:
        return {t['id']: solver.Value(task_vars[t['id']]['start']) for t in tasks}
    return None

Прогноз порушень графіка

Early Warning система:

ML-модель передбачає роботи, які затримаються: Ознаки: поточний відсоток виконання vs. плановий, темп виконання останніх 5 днів - Доступність ресурсів: погода (робочих днів менше), постачання матеріалів - Тип роботи: бетонні (залежать від погоди), монтаж (залежать від постачання)

import lightgbm as lgb
import pandas as pd

def predict_schedule_delay(task_progress_df, project_context):
    """
    Прогноз задержки для каждой незавершённой работы.
    task_progress_df: ежедневные отчёты о выполнении работ
    """
    features = task_progress_df.copy()

    # Ключевые признаки
    features['planned_vs_actual'] = (features['actual_pct'] -
                                     features['planned_pct_today'])
    features['velocity_7d'] = features['actual_pct'].diff(7) / 7  # % в день
    features['required_velocity'] = ((100 - features['actual_pct']) /
                                     (features['days_remaining'] + 1))
    features['velocity_gap'] = features['required_velocity'] - features['velocity_7d']

    # Контекстные признаки
    features['rain_days_forecast'] = project_context.get('rain_days_next7', 0)
    features['resource_availability'] = project_context.get('crew_availability', 1.0)
    features['material_on_site'] = features['material_stock_days']

    model = lgb.LGBMRegressor()  # предобученная модель
    delay_predictions = model.predict(features[feature_cols])

    return delay_predictions  # в рабочих днях

Динамічний перерахунок при відхиленнях

Сценарний аналіз:

При затримці критичної роботи - автоматичний перерахунок: 1. Визначити affected downstream tasks (всі послідовники) 2. Перевірити: чи буфер (float) чи критичний шлях? 3. Запропонувати варіанти recovery: - Додати ресурси на роботу, що затрималася, - Перепланувати паралельні роботи - Скоригувати scope (якщо припустимо)

Crash Analysis:

Що якщо стиснути терміни: які роботи стискати за мінімальних додаткових витрат? - Crash cost per day для кожної роботи (подвоїти бригаду = +N руб/день, -M днів) - Linear Programming: мінімізувати додаткові витрати для досягнення target терміну

Управління ресурсами

Планування поставок:

Look-ahead schedule: які матеріали потрібні через 2–4 тижні → автоматичні заявки на поставку: - Реєстр робіт + норми витрати → відомість матеріалів за періодами – Буфер: 10–15% запас на складі від тижневої потреби – Alert: матеріал закінчується через 5 днів, а lead time постачальника 7 днів

Workforce planning:

Прогноз потреби в бригадах та спеціальностях по днях: - пік в опалубних роботах: потрібні 3 бригади × 5 осіб - спад: 1 бригада на зачистку - висновок: попередити виконроба про піки за 2 тижні для найму/залучення

Термін розробки: 3–5 місяців для системи автоматичного планування графіка, прогнозу затримок та динамічного перерахунку з інтеграцією у Primavera P6/MS Project.