Фрагменты обсуждений в чате. Тема - научить ботов общаться.

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


Если есть какие то идеи, пишите в комментариях.

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

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

Например к боту приблизился хищник, бот выставляет например 25 на всеобщее обозрение(естественно это должно само сформироваться). Другие боты переодически проверяют значения у соседей и если меньше например 30, то бегут от этого места.

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

Я имею ввиду более сложные коммуникации, которые позволят существам сотрудничать между собой.

Бот нашел много еды и выставил 120 на всеобщее обозрение. Другие боты проверяют и если больше 100, то там есть еда и боты идут туда

Тут использованы следующие очень вариативные команды:

1. выставить какое-то значение на показ

2. Сравнить с каким-то параметром

3. Переход по адресу.

Причиной их вариативности является то, что они работают с аргументом.

А это очень сильно замедляет процесс эволюционного создания данного алгоритма.

Т.к. вероятность того что возникнет несколько мутаций, которые в каждой из команд установят правильные параметры для работы ничтожна мала. При этом генетический алгоритм не помогает селекционировать эти команды.

Мутация закрепится если будет полезна.

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

Это обозначает, что данный алгоритм получится только в результате полного перебора команд, который когда-то приведет к этому алгоритму. Но ген. алгоритм проведёт к нему позже чем полный перебор.

Ген. алгоритм эффективен только для создания модулей(мини-алгоритмов полезных для выживания). На начальных этапах он не сильно уступает перебору. Большинство необходимостых для жизни модулей имеют небольшой размер.

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

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

Также должна закрепиться проверка значений у соседей. Также не требует ресурсов, если не делать эту команду конечной, после которой управление переходит к другим ботам.

Например бот при атаке хищников выставляет 30.

Если сосед, прочитав 30 не убежал, то погиб, не оставив потомства. То есть это легко подхватиться естественным отбором.

Ну и здесь я описал пассивную систему коммуникаций, предполагаю использовать и активную (на основе прерываний)

2. Сравнить с каким-то параметром

3. Переход по адресу.

Сравнить и переход - это одна команда

Допустим аргумент команды показать генерируются от 0 до 99.

Пусть в процессе эволюции произошла мутация и появилась команда показать число 30. - без проблем, вероятность этого очень велика.

Однако. Это команда должна появиться ещё в нужном месте, допустим это место - реакция на врага. Т.е. когда бот видит врага, тогда он выпускает сигнал 30.

Хорошо. Что дальше? А дальше ничего. Т.к. в процессе эволюции боты ещё не научились реагировать на сигнал 30. Т.е. выпуск сигнала 30 пока что остается нейтральной мутацией, а шанс замещения нейтральных мутаций высок(Естественный отбор(С)).

Ладно, допустим у какого-то бота появилась команда считать, считывает он сигнал 30. Теперь он должен как-то на него отреагировать. Т.е. должна появиться ещё одна команда IF, эта команда должна ещё появиться в нужном месте(сразу после команды считать) да ещё и с нужным аргументом(30), т.е. вероятность создания этой команды очень мала.

Далее. Теперь бот может реагировать на команду 30, но ещё не понимает как. Т.е. должна появиться ещё одна команда и опять же в нужном месте(сразу после команды IF), этой командой должен быть бег.

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

И у этого метода есть хорошая оптимизация - модульность.

Не пихать всё в одну кучу(генотип) - большой список команд для существа. А разбить на более мелкие кучки - модули. И в рамках каждого модуля будут проходить свои мутации, аргументы для команд в рамках модуля будут генерироваться из небольшого списка. Так вероятность появления команды с нужным аргументом сильно возрастает +, если в этом модуле уже использовался какой-то аргумент, то вероятность того, что этот аргумент появится снова в этом модуле можно искусственно завышать. У меня случались такие ситуации, что одни и те же аргументы часто всплывали в разных местах. Так процесс подгонки аргументов можно ускорить.

Насчёт полового размножения.

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

+ Можно ввести для каждого модуля несколько параметров:

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

Но при этом важность - это всё же вероятность, она не может быть равна 0 или 1, это просто шанс передачи модуля потомкам.

Как вариант реализации размножения:

Сортируем модули по важности, затем берём лучшие 10(условно).

Ещё один параметр - устойчивость:

Чем старее модуль, тем лучше он отточен, т.е. не требует нововведений или каких-то мутаций для своего улучшения.

Это дает нам идею снизить для старого модуля вероятность появления в нём новой мутации."

Комментарии: