Автору респект! Проект очень интересный, настолько интересный, что я зарегестрировался на Хабре).
Не совсем понятен возникший спор о том, что такое жизнь. Какая в конце-концов разница? Понятно что созданное здесь не жизнь, а лишь компьютерная модель. Модель объясняющая работу эволюции и принципы естественного отбора. В этом плане проект в самом деле потрясающий. Особое уважение вызывает попытка автора не запрограммировать поведение, а сделать так, чтобы боты пришли к какой-то модели поведения «естественным» путём.
Другая серия комментариев связана с созданием искусственного интеллекта, задачей тоже не связанной с данной темой. Делать искусственный интеллект и симулятор жизни совершенно разные задачи. Далеко не всё живое обладает интеллектом, вряд ли он есть у растений (Саймак бы поcпорил, конечно, вспомним его «All flash is grass»).
Теперь, если позволите, несколько размышлений о самом проекте. Первое, что бросается в глаза (и об этом уже были замечания), что команды для ботов, в общем-то, готовые. Она просто случайным образом появляется в «геноме». Так ли это интересно? фактически всё число возможных моделей поведения равно числу возможных команд в степени числа ячеек под них.
Второе, в данной реализации «параметры» и «действия» записаны в один буфер. В природе же это не совсем так. У всех людей один генотип, они могут давать друг с другом потомство, но ни один человек не обладает абсолютно одинаковой внешностью. Да что человек, на дереве не найдешь ни одного одинакового листа. Тем не менее у всех (почти) людей при рождении две ноги. Где-то это ведь прописано? Возможно боту следует добавить свойства? В виде отдельного массива. Желательно переменной длины. В этом массиве хранить какие-то значения. А где-нибудь в генотипе прописывать, какая ячейка массива за что отвечает. Например появляются у бота мышцы, появляется ячейка где прописана величина мышечной активности. Когда выполняется команда «движение» программа обращается к этому показателю и в зависимости от величины позволяют организму пройти на 1, 2 или 3 клетки (условно). Когда у организмов появляется потомок его значение параметров какое-нибудь среднее между показаниями родителей с каким-либо допустимым отклонением (его можно прописывать как константу мира). Организмы усложняются появляется больше параметров. Кому то достаточно 2-3, кому-то 50.
Третье, возможно надо переосмыслить алгоритм выполнения команд. Почему они выполняются последовательно? Может же организм самостоятельно принимать решение, какую команду использовать? Хотя тут мы опять подходим к понятию интеллект, который «по-хорошему» в данном проекте должен появиться сам собой. Возможно придумать как могут появится различные условные операторы в ходе развития ботов.
+ некоторые команды возможно сделать «врожденными» и не зависимыми от того есть соответствующая команда в стеке или нет? Ну, например, узнать сколько у бота энергии?
P.S. немножко странно, что подобный проект написан на Жава. Мне кажется тут бы больше подошли более производительные языки, типа СИ.
Не совсем понятен возникший спор о том, что такое жизнь. Какая в конце-концов разница? Понятно что созданное здесь не жизнь, а лишь компьютерная модель. Модель объясняющая работу эволюции и принципы естественного отбора. В этом плане проект в самом деле потрясающий. Особое уважение вызывает попытка автора не запрограммировать поведение, а сделать так, чтобы боты пришли к какой-то модели поведения «естественным» путём.
Другая серия комментариев связана с созданием искусственного интеллекта, задачей тоже не связанной с данной темой. Делать искусственный интеллект и симулятор жизни совершенно разные задачи. Далеко не всё живое обладает интеллектом, вряд ли он есть у растений (Саймак бы поcпорил, конечно, вспомним его «All flash is grass»).
Теперь, если позволите, несколько размышлений о самом проекте. Первое, что бросается в глаза (и об этом уже были замечания), что команды для ботов, в общем-то, готовые. Она просто случайным образом появляется в «геноме». Так ли это интересно? фактически всё число возможных моделей поведения равно числу возможных команд в степени числа ячеек под них.
Второе, в данной реализации «параметры» и «действия» записаны в один буфер. В природе же это не совсем так. У всех людей один генотип, они могут давать друг с другом потомство, но ни один человек не обладает абсолютно одинаковой внешностью. Да что человек, на дереве не найдешь ни одного одинакового листа. Тем не менее у всех (почти) людей при рождении две ноги. Где-то это ведь прописано? Возможно боту следует добавить свойства? В виде отдельного массива. Желательно переменной длины. В этом массиве хранить какие-то значения. А где-нибудь в генотипе прописывать, какая ячейка массива за что отвечает. Например появляются у бота мышцы, появляется ячейка где прописана величина мышечной активности. Когда выполняется команда «движение» программа обращается к этому показателю и в зависимости от величины позволяют организму пройти на 1, 2 или 3 клетки (условно). Когда у организмов появляется потомок его значение параметров какое-нибудь среднее между показаниями родителей с каким-либо допустимым отклонением (его можно прописывать как константу мира). Организмы усложняются появляется больше параметров. Кому то достаточно 2-3, кому-то 50.
Третье, возможно надо переосмыслить алгоритм выполнения команд. Почему они выполняются последовательно? Может же организм самостоятельно принимать решение, какую команду использовать? Хотя тут мы опять подходим к понятию интеллект, который «по-хорошему» в данном проекте должен появиться сам собой. Возможно придумать как могут появится различные условные операторы в ходе развития ботов.
+ некоторые команды возможно сделать «врожденными» и не зависимыми от того есть соответствующая команда в стеке или нет? Ну, например, узнать сколько у бота энергии?
P.S. немножко странно, что подобный проект написан на Жава. Мне кажется тут бы больше подошли более производительные языки, типа СИ.