LINUX.ORG.RU
ФорумGames

А как реализовать разнообразие видов в симуляторе эволюции?

 ,


1

4

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

  • У каждой особи при рождении есть запас энергии, равный 100. Также есть геном, в котором кодируются действия особей (по сути, команды, которые интерпретируются мозгами. Т.е. кодируется только поведение). Геном состоит из 25 генов, пока.
  • Каждый цикл обрабатывается определенный ген. В данный момент есть гены для передвижения в пространстве и бездействия. Движения отнимает энергию. Если энергии нет, особь умирает.
  • Боженька наблюдает за всем этим и выбирает особь у которой остается больше всего энергии, т.е, по сути, менее подвижную. Новая популяция получает геном самого ленивого чувака из прошлой популяции с вероятностью мутации каждого гена в 15%.
  • Через куча поколений «продолжительность жизни» выросла в 200 раз. Все работает.

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

Deleted

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

anonymous
()

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

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

blexey ★★★★★
()

А кстати, какие «гены» у тебя реализованы?

blexey ★★★★★
()

Новая популяция получает геном самого ленивого чувака из прошлой популяции

Да. Такой мир мог только лоровец сделать.

crutch_master ★★★★★
()
Ответ на: комментарий от anonymous

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

Именно. А у меня это не реализовано, я думаю как лучше это сделать. Радует, что впереди выходные :)

Deleted
()
Ответ на: комментарий от blexey

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

Deleted
()
Ответ на: комментарий от rogerw

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

Deleted
()
Ответ на: комментарий от Deleted

новые виды не образуются
организмы не усложняются

rogerw
()

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

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

Выбирай много особей, а не одну.

Leron ★★
()
Ответ на: комментарий от rogerw

новые виды не образуются
организмы не усложняются

Об этом тред. Я спрашивал о способах реализации многообразия видов. Читать можешь? А эволюционный алгоритм работает, и не надо с этим спорить.

эволюция
боженка

крестик сними или трусы надень

В сарказм не можешь, не? Тоже не эволюционируешь?

Deleted
()

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

anonymous
()
Ответ на: комментарий от Leron

Введи метрику близости геномов

Думал об этом, да. Но это довольно сложный механизм... Скорее всего, я запилю возможность спариваться с любой особью, а разделение на виды будет проявляться лишь в поведение/структуре особей. Ну и территориально они тоже должны будут по расползаться.

Deleted
()

Сделай интерфейс для плагинов, чтобы можно было цеплять свои гены. И выкладывай на жидхаб.

vurdalak ★★★★★
()
Ответ на: комментарий от vurdalak

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

Deleted
()
Ответ на: комментарий от Deleted

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

vurdalak ★★★★★
()

Тоже что-то такое делал, результаты были примерно как у тебя, тоже думал о диверсификации особей, но на этом обленился. Идея была в том, что на карте рандомно генерируется корм (трава), который могут поглощать животные. Есть ген, регулирующий пристрастие животного к тому, что оно будет есть траву или других животных. Тут уже можно выстраивать множество стратегий (т.е. вспомогательными генами регулировать поведение животного в различных ситуациях много-мало травы/присутствие-отсутствие хищников-жертв).
Так же была задумка насчет диверсификации по типу поверхности: воздух, вода/почва. А так же по высоте/глубине (тут была идея кормить животных в воздухе «солнцем», а в почве «ядром»).
Гены задавались не как 0 и 1, а 0-9, например.
Была еще дикая задумка, которую я так и не продумал: генотип задавался произвольной строкой, а тот или иной признак задавался функцией от этой строки. Например, хищность определяется третьим символом в строке; пристрастие к полетам вычисляется как пятый символ от хэша строки; количество максимальной жизненной энергии задается количеством символа A в строке. Тогда в некоторых случаях в результате мутаций можно удлинять или укорачивать генотип, сохраняя наличие признаков (но не обязательно особь,хехе).

anonymous
()

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

Deleted
()
Ответ на: комментарий от anonymous

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

Deleted
()
Ответ на: комментарий от Deleted

Думал об этом, да. Но это довольно сложный механизм...

Может и не очень. Смотря что у тебя хранится в генах.

Leron ★★
()
Ответ на: комментарий от Leron

Сейчас все очень просто. Один ген - одно действие. Например - GEN_MOVE_LEFT - двигаться влево.

Deleted
()
Ответ на: комментарий от Deleted

А у меня это не реализовано

Зря, кроссовер - это святое.

O02eg ★★★★★
()

В данный момент есть гены для передвижения в пространстве и бездействия. Движения отнимает энергию. Если энергии нет, особь умирает.

Бездействие тоже отнимает энергию IRL.

O02eg ★★★★★
()

идеи по тому, как можно реализовать разнообразие видов.

Иметь геномы разной длины и требовать для скрещивания одинаковую. Разные виды не скрещиваются (за редкими исключениями всяких там лигров, которые потомства не дают, так что можно пренебречь) — вот и будет разнообразие. Геном случайно может укоротиться событием «ионизирующая частица летела-летела, на ДНК села, хромосому отъела».

Smacker ★★★★★
()

Т.е. кодируется только поведение

Дык эта, если кодируется только поведение, то что вообще подразумевать по видом? Разные виды поведения?

Разные виды не могут скрещиваться. Нужно установить порог различия генов при котором скрещивание невозможно.

no-such-file ★★★★★
()

Движения отнимает энергию. Если энергии нет, особь умирает

Что ж они у тебя не жрут ничего что-ли? Нужно разбросать еду и за сжирание давать энергию. Интересно, как быстро они эволюционируют, чтобы выработать удачный паттерн поиска жратвы (инстинкт).

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Нужно установить порог

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

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.