Архитектура вселенной №1.

Архитектура вселенной №1.

Сообщение talash » 06 ноя 2020, 17:50

Проект Дафния. Архитектура вселенной №1.

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

Этим решением, упрощённой физикой, наш проект отличается от других, например, от OpenWorm, где пытались моделировать реальную жидкую среду. В самом деле, нервная система анализирует поступающие сигналы и её принципы работы не зависят от того в какой физической реальности существует её обладатель. С другой стороны, мы хотим наши исследования нервной системы переносить на реальный мир, поэтому важные физические свойства будут моделироваться. Например: наша Дафния будет существовать в 3х-мерном мире с возможностью двигаться и поворачиваться. Также нам нужно зрение, как самый точный и универсальный способ, с помощью которого, существа из нашего мира получают о нём информацию, поэтому в нашей упрощённой физике также есть “фотоны”.

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

Тип - это может быть стена, корм, пустота или наблюдатель(Дафния).

Цвет - задаётся для всех типов ячеек, кроме пустоты. У пустоты цвет игнорируется. Цвет Дафнии тоже не важен, пока она одна во вселенной. В будущем сделаем возможность существования множества существ на одном сервере.

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

Таким образом достигается распараллеливание вычислений без использования мьютексов. Пока Дафния одна, физику можно обрабатывать только вокруг неё. В результате я получил на не самом быстром процессоре (даже не на видеокарте) внушительное быстродействие, порядка 20000 квантов времени в секунду.

Фотоны состоят из следующих элементов:
Цвет
Ориентация
Параметр

Наши фотоны эхолокационные, то есть Дафния их испускает сама. Параметр используется для хранения номера зрительного нейрона, который испустил этот фотон.

Глаз дафнии состоит из 16x16 = 256 зрительных нейронов. Сервер только отправляет и принимает фотоны, всю остальную обработку делает клиент. На сервере из ячейки, где находится Дафния, каждый квант времени испускается 4 эхолокационных фотона. Эти фотоны испускаются зрительными нейронами со случайными координатами, а направление их соответствует этим координатам, например, фотон с координатами 8,8 летит почти прямо, куда направлена Дафния, а фотон 0,0 летит влево вниз. Почему отправляем только 4 фотона в квант времени? Потому что фотоны сразу после отправления попадают в соседние ячейки и если два фотона из ячейки Дафнии попадают в ту же соседнюю ячейку, то один из них затрёт второй. Поэтому сделано такое ограничение. Фотоны летят вперёд по своему направлению, постепенно теряя интенсивность, которая хранится в альфа-канале цветовой переменной. Если фотон попадает в твёрдую ячейку, то он меняет направление на обратное и приобретает цвет этой ячейки. Если фотон долетает до Дафнии, то он принимается и отправляется на клиент по UDP протоколу.

Важно подчеркнуть, что в перспективе на сервере будет много дафний или других существ, поэтому это реалтайм сервер. Напишу подробно, как сейчас работает мой клиент. Он постоянно шлёт запросы и уведомления на сервер по UDP протоколу независимо от его ответов, он шлёт MsgGetState, потом уведомления об активных моторных нейронах, потом имитация работы нейросети 1мс и так по кругу. Если запрос MsgGetState и уведомления об активностях моторных нейронов с клиента приходят чаще чем один раз за квант времени, то сервер игнорирует всё лишнее. При приёме MsgGetState сервер отвечает MsgGetStateResponse, в нём передаётся текущее время вселенной и затем передаёт фотоны принятые Дафнией в текущий квант времени. Если MsgGetState в текущем кванте не пришло, то сервер на клиент ничего не шлёт. То есть, если клиент работает медленнее сервера, то он будет терять часть информации о принятых фотонах. Чем медленнее клиент, тем хуже у него зрение и тем медленнее он сможет двигаться.

Протокол на апрель 2020:

Клиент->Сервер:

MsgGetState
uint8 type;

MsgRotateLeft
uint8 type;
uint8 value;

MsgRotateRight
uint8 type;
uint8 value;

MsgRotateUp
uint8 type;
uint8 value;

MsgRotateDown
uint8 type;
uint8 value;

MsgMoveForward
uint8 type;
uint8 value;

MsgMoveBackward
uint8 type;
uint8 value;

Сервер->Клиент:

MsgGetStateResponse
uint8 type;
uint64 time; // количество квантов времени от начала существования вселенной

MsgSendPhoton
uint8 type;
EtherColor color;
uint8 posX;
uint8 posY;
talash
Администратор
 
Сообщения: 392
Зарегистрирован: 24 май 2013, 17:48

Вернуться в Проект Дафния

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron