Comments 13
TLDR;
// Прогноз и применение
this.loadedWorld.cells.forEach(cell => {
const [pTemp, pHum, pPrec, pWind, pCloud] = this.aiService.predictWeather(cell, this.loadedWorld);
cell.climate.temperature = pTemp * 50;
cell.climate.humidity = pHum * 100;
cell.climate.precipitation = pPrec * 100;
cell.climate.windSpeed = pWind * 100;
cell.climate.cloudCoverage = pCloud;
});
Статья оказалась не только интересной и информативной, но и вдохновила на новые идеи и проекты! Желаю удачи в дальнейшей разработке, продолжайте в том же духе!)
Если я правильно понял вашу идею создания симуляции мира, то:
выделяется набор сущностей, который описан числовыми параметрами: мир вообще, ячейки мира... далее, пожалуй, должны появиться и другие сущности биосферы;
с заданным интервалом в нейронную сеть скармливаются текущие параметры всех ячеек (и сущностей), что порождает их новые значения;
в нейронную сеть могут быть загружены правила-примеры, которые у сущностей уточняют функции взаимосвязей от текущих параметров к следующим.
Соответственно дальнейшее наполнение мира-симуляции, это:
введение новых сущностей;
введение правил-примеров для нейронной сети.
А сама симуляция заключается в том, что, задав некие начальные значения параметров всех созданных сущностей (и модель нейронной сети, т.е. её структуру и веса) в ней "проживаем" несколько её циклов.
------
Если я прав, то в чём-то это напомнило аналог игры жизнь, с полем в виде поверхности сферы и функцией порождения состояния следующего шага на основе нейронной сети.
И если это так то, честно говоря, именно об этой модели хотелось бы прочитать в самом начале, а не о деталях её реализации.
А дальше разсуждения на темы того:
насколько сложные взаимосвязи можно будет выразить в такой игре;
насколько предсказуемым будет её программирование на основе задания примеров;
какие сценарии игр в такой симуляции могут быть для людей-участников и какие воздействия они могли-бы оказывать;
возможна ли интеллектуальная составляющая в такой симуляции и какие задачи она бы могла в её пределах решать.
Тут под интеллектуальной составляющей я подразумеваю аппарат управления сложными системами через действия с их моделями для достижения максимума критериев оптимальности.
Я постараюсь учесть Ваши правки, спасибо большое, опыт в написании таких работ не было, но вы меня правильно поняли
Я тоже не знаю, как писать такие статьи. К тому же думаю, что вы, как автор, в праве выбирать как тематику, так и форму повествования. Мои пожелания... скажем так, они только мои.
В вашей статье я увидел интересный способ применения ИИ, как этакого “чёрного ящика”, которому говорят, как себя вести и он под эти указания своё поведение подстраивает. С темой ИИ я мало знаком, лишь на уровне подобных статей на Хабре и описания некоторых моделей. Но в них чего-то такого ранее не замечал.
В приведенном вами способе я обратил внимание на то, что есть выделение:
числовых параметров — которыми описываю сущности
и, потенциально,
взаимосвязей сущностей — которые задаются тем, какие ещё "параметры рядом стоящих сущностей", кроме параметров самой данной сущности, передают в функцию, порождающую следующее состояние данной сущности.
Где функции (предполагая, что для каждой сущности своя) — обозначенные "чёрные ящики".
Т.к. "ящики чёрные", т.е. мы то хоть и знаем что это нейронные сети с обучением по примерам — но всё же то, как сеть воспримет добавление примеров и какую взаимосвязь при этом выстроит — остаётся для нас неизвестным. Так вот, т.к. "ящики чёрные" то у меня и возникает закономерный вопрос об устойчивости по предсказуемости поведения такой системы.
Другими словами, у программиста такой системы есть, пожалуй, 3 основных, возможных управляющих воздействий на систему:
добавление сущности;
модификация списка параметров, передаваемых в функцию сущности (тут и в плане их количества, и в плане способа выборки);
добавление примеров поведения, на которых функции сущности обучаются.
Если с первыми двумя управляющими воздействиями всё более-менее понятно, в том смысле что какие сущности есть и какое взаимное влияние их друг на друга мы позволяем системе учитывать — мы задаём сами.
То с обучением через указание примеров — возникают вопросы. Основа которых — как мы можем быть уверенны в том, что добавив вот такой-то пример мы получим ожидаемое нами изменение в поведении... при этом не поломав уже существующее и удовлетворяющее нас поведение.
А что будет если добавляемые нами примеры будут конфликтовать друг с другом? Т.е. что если для одной и той-же ситуации один пример будет говорить что надо сделать одно, а другой — другое.
Это одна часть моего интереса… как потенциального программиста такой системы.
(о других ниже)
Всё же 4-ре возможных управляющих воздействия:
добавление сущности с характеризующими её параметрами и функцией-нейронкой — которая характеризуется дополнительным набором передаваемых в неё параметров (помимо параметров самой сущности) и структурой нейронки (количество слоёв, связями между слоями).
модификация сущности, т.е. изменения набора и типов характеризующих её параметров и изменение характеристик нейронки.
модификацией связей сущностей, т.е. списка дополнительных параметров передаваемых в нейронку сущности: их количества или способа выборки. Этот пункт подобен приведенному выше 2-му, однако:
2-й пункт сфокусирован на самой сущности,
3-й — на создании потенциальных взаимосвязей сущностей. Потенциальных, поскольку может оказаться так, что нейронка просто проигнорирует какие-то из дополнительных параметров. Например, если не будет примеров поведения, которые эти параметры затрагивают.
добавление примеров поведения, на которых функции-нейронки сущностей обучаются.
И если первые 3 пункта понятны, в том смысле что задачу устойчивости по предсказуемости их последствий решает программист, который эти воздействия оказывает. То в плане 4-го, решение этой задачи частично перекладывается на алгоритм обучения нейронной сети.
А может ли обучение нейронной сети провалиться? Т.е. алгоритм там заложенный, может ли вернуть ошибку? Что-то вида — извините, но для заданного набора примеров я не смог подобрать веса сети так, чтобы все примеры из списка устойчиво выполнялись.
* * *
Кстати, из приведенных размышлений выше, я осознал, что же меня так заинтересовало в обсуждаемом способе разработки. Нейронная сеть здесь выступает как некий "смеситель логики". В том смысле что элементы требуемой логики поведения сущности задаются примерами. А алгоритм обучение нейронки на них... неким образом эти примеры анализирует и из них создаёт единую функцию-сборку, т.е. собирает разбросанные по примерам элементы логики в единую логическую функцию.
При этом я знаком с Достаточно Общей Теорией Управления (ДОТУ), которая разсматривает процессы управления, очищенные от прикладных деталей областей (в которых управление протекает) и предоставляет обобщённый понятийный аппарат. В самом общем виде под управлением там понимают: выявление объективных возможностей, целеполагание в отношении них и достижение избранных целей в практической деятельности.
В ДОТУ, сталкиваясь с процессами, которыми возникла потребность управлять, выделяют набор параметров, которыми происходящее можно отразить-описать. Из множества выделенных параметров:
какие-то становятся целевыми — в том смысле что у субъекта управленца есть пожелания по поводу того какими их значения должны быть или как значения должны меняться со временем;
другие управляемыми — те, на которые субъект может оказать воздействие непосредственно, задать их значение;
третьи свободными — любые значения которых признаются допустимыми, а их роль заключается в том, что они объективно или субъективно необходимы для формирования вектора управляющего воздействия.
А выделив параметры, формируются Целевые Функции Управления (ЦФУ) и генеральная концепция управления. ЦФУ задаёт соответствие, для каждой возможной ситуации какое управляющее воздействие надо оказать чтобы достичь одной из целей в векторе целей (т.е. какое должно быть воздействие чтобы значение одного из целевых параметров соответствовало желаемому). Генеральная концепция — это некая сборка всех ЦФУ так, чтобы их общее управляющее воздействие попадало в цель или вело систему по целевой траектории в пространстве выделенных параметров.
Если несколько усложнить обсуждаемую систему с нейронками, до уровня, когда за каждым параметром сущности стоит своя нейронка, то возникнет интересное соответствие:
нейронка-функция одного параметра сущности — это ЦФУ, частная концепция управления;
совокупность нейронок одной сущности — это концепция управления сущностью данного типа;
совокупность всех нейронок — генеральная концепция управления всей системой.
А задача построение логики концепций управления отчасти переложена на алгоритм обучения нейронки, тем самым позволяя программисту задавать лишь требуемые примеры поведения (примеры соответствия значений доступных параметров и значения целевого параметра).
Конечно, такое соотнесение понятий и частичное переложение задачи лишь отчасти облегчает построение сложной логики поведения системы. В частности, тут не видно механизма проверки того, что совокупность будет вести себя так как хотели (ведь обучение ведётся отдельных нейронок). Но, о нём можно подумать. А вот возможность задавать примеры, а не писать логику кажется повышает производительность и выразительные возможности способа.
Кстати, алгоритмы "смешения логики" могут быть разными. Например, мне вспомнился метод построения управляющей схемы из прикладной теории цифровых автоматов. Там ведь тоже, в начале задавалось множество соответствий, а потом, на его основе, по заданному алгоритму, строилась логическая схема конечного автомата, который логику этих переходов воплощает.
Какой интересный и большой комментарий!) Спасибо за время, именно наша задача научить сеть не ошибаться это то, к чему стремятся все кто обучают модели. Я не исключение, провалы будут. Но задача избегать их как можно больше научив и предоставив все возможные примеры а в будущем создать сущность в бд которая будет постоянно доучивать при новых сценариях - автоматизация процесса обучения ИИ. Я верю, что возможно все хоть и амбициозность этой задачи иногда пугает 😅
Хорошего времени суток! Буду ждать Вас вновь
Эта статья – настоящий источник вдохновения для разработчиков! Отличное сочетание NestJS и TensorFlow.js показывает, как можно создавать сложные и живые виртуальные миры, используя современные технологии. Автор доступно объясняет концепции и демонстрирует мощь AI в веб-разработке. Особенно впечатляет подход к интеграции искусственного интеллекта в динамичные среды. Отличный материал для всех, кто хочет расширить границы возможного в разработке! 👏🔥
Идея шикарная. Перебор конечно с всей инфраструктурой вроде орм, бекенда, фронта ради простой (или нет) симуляции... Но это уже на вкус и цвет...
Лично мне как будто не хватает базового описания того, что мы будем делать и общей теории, словно я что то упускаю - сначала огромный кусок кода потом объяснения бегло. Канеш, тут технари но общую теорию все равно не помешает добавить. И спойлеры добавить для кода.
Буду ждать продолжения.
Код, который дышит: создание виртуальной вселенной на NestJS и своим AI на Tensorflow.js