Categorygithub.com/Anemun/goEvolutionSimulator
modulepackage
0.0.0-20220523081646-a4f3d29f7f54
Repository: https://github.com/anemun/goevolutionsimulator.git
Documentation: pkg.go.dev

# README

Это симулятор искуственной жизни, построеный на основе генитических алгоритмов. Основа симуляции - боты, у них есть свой геном (он же является их мозгом и их программой), который записан в виде 64 чисел, каждое от 0 до 63. Свой первый ход бот начинает с 1 ячейки генома (указатель генома = 0), считывая записанное в ней число и совершая действие (команду), соответствующее этому числу. Указатель на то, какую ячейку считывать следующей, перемещается на несколько ячеек вперёд, в зависимости от исполненной команды. Если указатель выходит за рамки генома (число более 63), то он закольцовывается и геном начинается сначала. В зависимости от установленных правил, бот может давать потомство. При этом есть шанс мутации - тогда случайная ячейка генома будет заменена на случайное число. Таким образом, боты, наиболее приспособленные к окружению (то есть могущие дать потомство) клонируются, с некоторым шансом случайно сделать более лучшую версию себя.

Далее описаны команды для ботов и некоторые правила.

  • В ход бот может сделать основное действие и несколько малых действий. Основное действие заканчивает ход бота, малое действие не заканчивает ход, а вызывает следующую команду.

  • Бот может расти, создавая органы. Каждый орган потребляет одну дополнительную энергию в ход, но даёт боту преимущества. Если мы делаем простые органы:

    • максимальный уровень энергии повышен в полтора раза
    • орган может дать +1 действие в ход
    • орган может дать дополнительный фотосинтез
    • орган может нанести урон (?) атакующему, если у бота больше энергии чем у атакующего Если мы делаем сложные органы: <<< сейчас реализован этот вариант
    • орган имеет свой геном из Х ячеек (но с 64 значениями)
    • максимальный уровень энергии бота будет больше на размер генома органа
    • команды для органа работают немного иначе, чем для бота
    • бот может съесть свой орган, тогда он восполняет +X энергии (указывается в конфиге) #TODO
    • если орган кусает бота, то орган поглощается. если орган кусает орган, то целевой орган поглощается #TODO
  • На текущий момент у бота нет понятия поворота в какую-либо сторону, команды, зависящие от направления, вычисляют его каждый раз заново

Команды бота: ~ = основное действие _ = малое действие

~0 - стоять, ничего не делать. Указатель генома (УГ) +1

_5 - безотносительный взгляд - вычисляем направление взгляда на основе ячейки генома +1 - перемещаем указатель генома в зависимости от того, что увидели: - пусто: +2 - другой бот: +3 - родственник: +4 - еда: +5 - сам бот: +6 // например, голова смотрит на один из органов бота

~10 - безотносительное движение - вычисляем направление движения на основе ячейки генома +1 - проверяем возможность сдвига бота и всех его органов в этом направлении - если возможности движения нет, то стоим на месте и указатель генома +2 - если возможность движения есть, то перемещаем бота и все органы, указатель генома +3

~15 - укусить
- вычисляем направление кусания на основе ячейки генома +1 - кусаем объект в этом направлении - если укусили и пусто, то УГ +2 - если укусили другого бота, то УГ +3 - если укусили еду, то УГ +4 - если укусили себя, то УГ +5

~20 - фотосинтез - бот просто получает +Х энергиии (настраивается в конфиге), УГ +1

~25 - орган - начиная с направления "вперёд" и по часовой, найти первое незанятое направление #TODO переделать в зависимость от генома - если пустого места не нашлось, УГ+N+1 - если нашлась пустая клетка, создать там орган, скопировав следующие N значений генома (настраивается в конфиге, по умолчанию 8) в геном органа. УГ+N+2

~30 - потомство - начиная с направления "вперёд" и по часовой, найти первое незанятое направление #TODO переделать в зависимость от генома - если пустого места не нашлось, УГ+1 - если нашлась пустая клетка, создать там нового бота. Новый бот берёт геном родителя, с шансом мутации - заменится одно из значений генома. УГ+2

_иное число - перевод указателя генома на [иное число] вперёд

Команды органа: ~0 - простой, ничего не делаем. УГ+1

~10 - ускорить бота
- орган даёт +Х доп. очков действий своему боту. По умолчанию 5 очков действия за орган, т.е. нужно два органа, чтобы получить одно основное действие

~15 - укусить
- вычисляем направление кусания на основе ячейки генома +1 - кусаем объект в этом направлении - если укусили и пусто, то УГ +2 - если укусили другого бота, то УГ +3 - если укусили еду, то УГ +4 - если укусили себя, то УГ +5

~20 - фотосинтез - дать боту +Х энергии, УГ+1

# Functions

FinalSerialization finalize current chunk even if incomplete.
LoopValue returns value, looped between min (included) and max (not included) LoopValue for example, val=6, min=0, max=10 returns 6 LoopValue for example, val=0, min=0, max=10 returns 0 LoopValue for example, val=10, min=0, max=10 returns 0 LoopValue for example, val=11, min=0, max=10 returns 1 LoopValue for example, val=12, min=-10, max=10 returns -8 LoopValue for example, val=-11, min=-10, max=-5 returns -6.
SetLogLevel sets log Level (from 1 to 5, where 5 - show ALL and 1 - show only most important.
WriteLog writes to log.

# Variables

No description provided by the author

# Structs

Bot class.
No description provided by the author
No description provided by the author
No description provided by the author
Organ class.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author