Pull to refresh

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-ре возможных управляющих воздействия:

  1. добавление сущности с характеризующими её параметрами и функцией-нейронкой — которая характеризуется дополнительным набором передаваемых в неё параметров (помимо параметров самой сущности) и структурой нейронки (количество слоёв, связями между слоями).

  2. модификация сущности, т.е. изменения набора и типов характеризующих её параметров и изменение характеристик нейронки.

  3. модификацией связей сущностей, т.е. списка дополнительных параметров передаваемых в нейронку сущности: их количества или способа выборки. Этот пункт подобен приведенному выше 2-му, однако:

    • 2-й пункт сфокусирован на самой сущности,

    • 3-й — на создании потенциальных взаимосвязей сущностей. Потенциальных, поскольку может оказаться так, что нейронка просто проигнорирует какие-то из дополнительных параметров. Например, если не будет примеров поведения, которые эти параметры затрагивают.

  4. добавление примеров поведения, на которых функции-нейронки сущностей обучаются.

И если первые 3 пункта понятны, в том смысле что задачу устойчивости по предсказуемости их последствий решает программист, который эти воздействия оказывает. То в плане 4-го, решение этой задачи частично перекладывается на алгоритм обучения нейронной сети.

А может ли обучение нейронной сети провалиться? Т.е. алгоритм там заложенный, может ли вернуть ошибку? Что-то вида — извините, но для заданного набора примеров я не смог подобрать веса сети так, чтобы все примеры из списка устойчиво выполнялись.

* * *

Кстати, из приведенных размышлений выше, я осознал, что же меня так заинтересовало в обсуждаемом способе разработки. Нейронная сеть здесь выступает как некий "смеситель логики". В том смысле что элементы требуемой логики поведения сущности задаются примерами. А алгоритм обучение нейронки на них... неким образом эти примеры анализирует и из них создаёт единую функцию-сборку, т.е. собирает разбросанные по примерам элементы логики в единую логическую функцию.

При этом я знаком с Достаточно Общей Теорией Управления (ДОТУ), которая разсматривает процессы управления, очищенные от прикладных деталей областей (в которых управление протекает) и предоставляет обобщённый понятийный аппарат. В самом общем виде под управлением там понимают: выявление объективных возможностей, целеполагание в отношении них и достижение избранных целей в практической деятельности.

В ДОТУ, сталкиваясь с процессами, которыми возникла потребность управлять, выделяют набор параметров, которыми происходящее можно отразить-описать. Из множества выделенных параметров:

  • какие-то становятся целевыми — в том смысле что у субъекта управленца есть пожелания по поводу того какими их значения должны быть или как значения должны меняться со временем;

  • другие управляемыми — те, на которые субъект может оказать воздействие непосредственно, задать их значение;

  • третьи свободными — любые значения которых признаются допустимыми, а их роль заключается в том, что они объективно или субъективно необходимы для формирования вектора управляющего воздействия.

А выделив параметры, формируются Целевые Функции Управления (ЦФУ) и генеральная концепция управления. ЦФУ задаёт соответствие, для каждой возможной ситуации какое управляющее воздействие надо оказать чтобы достичь одной из целей в векторе целей (т.е. какое должно быть воздействие чтобы значение одного из целевых параметров соответствовало желаемому). Генеральная концепция — это некая сборка всех ЦФУ так, чтобы их общее управляющее воздействие попадало в цель или вело систему по целевой траектории в пространстве выделенных параметров.

Если несколько усложнить обсуждаемую систему с нейронками, до уровня, когда за каждым параметром сущности стоит своя нейронка, то возникнет интересное соответствие:

  • нейронка-функция одного параметра сущности — это ЦФУ, частная концепция управления;

  • совокупность нейронок одной сущности — это концепция управления сущностью данного типа;

  • совокупность всех нейронок — генеральная концепция управления всей системой.

А задача построение логики концепций управления отчасти переложена на алгоритм обучения нейронки, тем самым позволяя программисту задавать лишь требуемые примеры поведения (примеры соответствия значений доступных параметров и значения целевого параметра).

Конечно, такое соотнесение понятий и частичное переложение задачи лишь отчасти облегчает построение сложной логики поведения системы. В частности, тут не видно механизма проверки того, что совокупность будет вести себя так как хотели (ведь обучение ведётся отдельных нейронок). Но, о нём можно подумать. А вот возможность задавать примеры, а не писать логику кажется повышает производительность и выразительные возможности способа.

Кстати, алгоритмы "смешения логики" могут быть разными. Например, мне вспомнился метод построения управляющей схемы из прикладной теории цифровых автоматов. Там ведь тоже, в начале задавалось множество соответствий, а потом, на его основе, по заданному алгоритму, строилась логическая схема конечного автомата, который логику этих переходов воплощает.

Какой интересный и большой комментарий!) Спасибо за время, именно наша задача научить сеть не ошибаться это то, к чему стремятся все кто обучают модели. Я не исключение, провалы будут. Но задача избегать их как можно больше научив и предоставив все возможные примеры а в будущем создать сущность в бд которая будет постоянно доучивать при новых сценариях - автоматизация процесса обучения ИИ. Я верю, что возможно все хоть и амбициозность этой задачи иногда пугает 😅

Хорошего времени суток! Буду ждать Вас вновь

Эта статья – настоящий источник вдохновения для разработчиков! Отличное сочетание NestJS и TensorFlow.js показывает, как можно создавать сложные и живые виртуальные миры, используя современные технологии. Автор доступно объясняет концепции и демонстрирует мощь AI в веб-разработке. Особенно впечатляет подход к интеграции искусственного интеллекта в динамичные среды. Отличный материал для всех, кто хочет расширить границы возможного в разработке! 👏🔥

Идея шикарная. Перебор конечно с всей инфраструктурой вроде орм, бекенда, фронта ради простой (или нет) симуляции... Но это уже на вкус и цвет...

Лично мне как будто не хватает базового описания того, что мы будем делать и общей теории, словно я что то упускаю - сначала огромный кусок кода потом объяснения бегло. Канеш, тут технари но общую теорию все равно не помешает добавить. И спойлеры добавить для кода.

Буду ждать продолжения.

Спасибо, я буду стараться делать это еще лучше. Буду ждать Вас снова

Sign up to leave a comment.

Articles