Всего 3 месяца назад наша команда участвовала в HackAsia 2020 с Gammon Construction в качестве нашего партнера по вызову. Хотя мы не победили в конкурсе, это был чрезвычайно удовлетворительный проект, поскольку команда НАКОНЕЦ воплотила идею (… которая вынашивалась более года) в жизнь!
Мы создали GamBot 2.0, A.I. помощник в Revit, который работает в фоновом режиме и дает рекомендации при создании моделей в Revit. Поскольку мы разработали только Proof-of-Concept, единственной способностью GamBot было прогнозировать требования к воздушному потоку элементов помещения.
Было много вопросов по методологии, поэтому я подумал, что мы должны поделиться этими знаниями со всеми.
Предложение
Далее последовало первоначальное предложение, которое привело нас к дверям хакатона. Мы предложили процесс, замыкающий цикл между прошлыми проектами и текущими текущими проектами, с намерением использовать богатые данные прошлых проектов. В процесс вовлечены:
- Извлечение данных из прошлых моделей в IFC
- Хранение в базе данных
- Использование данных для обучения моделей машинного обучения
- Передача выходных данных ML в текущие модели в фоновом режиме

Почему IFC?
В частности, модели, совместимые с IFC. По двум основным причинам:
я. Семантическое значение
Как и любая схема XML, описывающая форматы обмена данными, IFC представляет собой открытую спецификацию для данных BIM, которыми обмениваются в строительном проекте. Он охватывает с очень высокого уровня, например информация о сайте на очень подробном уровне, например отличные характеристики дверей.
Структурирование данных с семантическим значением должно быть этапом 1, прежде чем можно будет разработать какие-либо надежные последующие процессы. Без какой-либо семантической ссылки будет сложно создать масштабируемую кроссплатформенную интеграцию, поскольку никто не «говорит на одном языке». Например, программное обеспечение A может классифицировать один объект как «этаж», а программное обеспечение B может использовать «плиту» для той же цели.
При обучении моделей машинного обучения, связанных с BIM, мы можем представить, что необходимо собирать данные из моделей BIM. А без соблюдения семантических ссылок никакие две модели не строятся одинаково, и, следовательно, IFC необходимо управлять структурой данных в модели BIM.
II. Формат OpenBIM
Файлы, созданные с помощью проприетарных инструментов разработки BIM, являются «закрытыми» форматами. Скорее всего, методов для прямого синтаксического анализа таких форматов файлов в пригодные для использования данные мало или их нет. Однако существует несколько известных способов проверки данных из моделей IFC напрямую с использованием проектов с открытым исходным кодом, таких как xBIM, IfcOpenShell, IfcPlusPlus и т. Д. (См. Их здесь).
Намерение состояло в том, чтобы разные программы BIM генерировали и могли читать одни и те же структурированные данные! Представьте себе, что после того, как проблем с совместимостью больше не будет!
И, основываясь на видении данных модели, совместимых с IFC, эти данные затем могут быть сохранены в хранилище данных для использования в качестве обучающих данных. Затем мы предложили обучение модульных моделей машинного обучения для различных целей, например оценка стоимости, соответствие конструкции и др.
После этого эти модели могут находиться на локальном или облачном сервере, а локальные приложения BIM будут активировать (т.е. запрашивать) эти модели машинного обучения за кулисами, отправляя пользователям рекомендации или прогнозы в реальном времени.
Хакатон
Теперь мы закончили романтизировать с моделями, совместимыми с IFC, вот что мы на самом деле сделали для проекта хакатона. Процесс был:
- Извлечение и подготовка данных
- Модель обучения машинного обучения
- Модель хоста в Azure
- Плагин Revit для запроса модели

1. Извлечение и подготовка данных
Энтузиасты данных и машинного обучения знают, что этот процесс следует базовому конвейеру машинного обучения, то есть сбор, подготовка, обучение и вывод данных.
Исходные данные извлечены.

Предварительно подготовленные входные данные, X.

Предварительно подготовленные данные этикетки, г

Разделите данные на обучающие и тестовые наборы для оценки точности.

Возможно, вы заметили, что данные в заголовках modeofventilation, buildingtype, level были закодированы как целые числа. Машина понимает числа, а не текст, поэтому дискретные строковые значения были классифицированы как числа с использованием категориального кодирования (Документация LabelEncoder).
2. Обучение модели машинного обучения
Мы использовали Scikit-Learn для обучения нашей модели машинного обучения, и, благодаря удобству и доступности пакета, мы смогли протестировать несколько алгоритмов обучения и выбрали наиболее точный, то есть классификатор случайного леса.
Логистическая регрессия

Классификатор случайного леса

Поддержка векторных машин.

Пакет для развертывания!

3. Модель хоста в Azure
Мы не являемся экспертами в облачных технологиях, но количество руководств и ресурсов, доступных в Интернете, позволило относительно легко найти правильный подход к развертыванию модели в облаке. Мы выбрали Azure, поскольку казалось, что доступные руководства и документация сделали именно то, что нам нужно (… И использование Azure принесло бонусные баллы!)
Вот что вам нужно сделать, чтобы развернуть модель в качестве конечной точки API, ознакомьтесь с ресурсами, которые помогли нам пройти хакатон:
- Создайте группу ресурсов
- Определите рабочую область в этой группе ресурсов
- Зарегистрируйте модель машинного обучения
- Разверните модель машинного обучения в службе
Модель развертывания:
docs.microsoft.com/en-us/python/api/overview/azure/ml/?view=azure-ml-py#model-deploy
SDK Python:
docs.microsoft.com/en-us/python/api/overview/azure/ml/install?view=azure-ml-py
4. Плагин Revit для модели запроса
Теперь нам осталось только интегрировать это с Revit!
Важным пользовательским интерфейсом, которого мы хотели достичь, было «ощущение» наличия искусственного интеллекта. помощник, предоставляющий живые рекомендации пользователям и записывающий параметры на лету. Для этого в подключаемом модуле Revit, работающем за кулисами, были реализованы две ключевые функции:
я. Добавьте триггер через Revit API Dynamic Model Updater
(интерфейс IUpdater)
ii. Запрашивайте модель машинного обучения и отправляйте результаты при срабатывании триггера
i. Средство обновления динамической модели (интерфейс IUpdater)
Интерфейс IUpdater позволяет нам регистрировать настраиваемые триггеры, и в нашем случае, в частности, триггеры при изменении параметров в элементах пространства. Например. из упрощенного кода ниже триггер срабатывает, когда определенный тип изменения, высота, изменяется для элемента пробела.
После запуска, что позволяет нам совершать транзакции в Revit API для записи параметров в элементы пространства и уведомлять пользователей с помощью всплывающих диалогов.
Вот полезные ссылки, которые проведут вас через детали реализации IUpdater, от регистрации Updater до выполнения транзакций.
TheBuildingCoder: https://thebuildingcoder.typepad.com/blog/2012/06/documentchanged-versus-dynamic-model-updater.html
Документы по Revit API: https://www.revitapidocs.com/2020/4cdaf502-fc25-8f18-7618-8448cce33d11.htm
II. Модель Query ML
Прежде чем совершать транзакции, нам необходимо получить обратную связь от развернутой модели машинного обучения. Вот процесс, который происходит при срабатывании триггера.
- Выполните запрос REST на развернутой модели машинного обучения.
- Десериализовать ответ от конечной точки модели машинного обучения
- Записать параметры в элементы пространства
- Уведомить пользователя с помощью всплывающего диалогового окна
Статический метод запроса REST показан ниже.
Закрытие
Соберите все это вместе, и у нас есть помощник по искусственному интеллекту, работающий в Revit!
Надеюсь, это приведет вас в правильное русло, если вы создаете что-то подобное. Вопросы ? Заинтересованы в работе с нами? Напишите нам по адресу [email protected].
Исходное сообщение: http://aectechy.com/steps-revit-ai-assistant/