GithubHelp home page GithubHelp logo

goevolutionsimulator's Introduction

Это симулятор искуственной жизни, построеный на основе генитических алгоритмов. Основа симуляции - боты, у них есть свой геном (он же является их мозгом и их программой), который записан в виде 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

goevolutionsimulator's People

Contributors

anemun avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.