Сравнительный анализ архитектуры GO и JS реализаций BEAST

Введение

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

1. Общие принципы

1.1. Дискретное время (пульс)

Обе реализации используют концепцию дискретного времени — «пульса». Это фундаментальное решение, обеспечивающее детерминизм и предсказуемость.

Аспект

GO

JS

Механизм

time.AfterFunc с рекурсивным вызовом

setTimeout в рекурсивной sep_of_puls

Счетчик

PulsCount

Cur_puls_val + cpuls

Точность

1 секунда (с корректировкой)

1 секунда (с корректировкой)

1.2. Иерархическая модель

Обе системы строятся на слоях: виталы → контексты → стимулы → рефлексы → память → осознание.

1.3. Разделение на типы памяти

1.4. Ориентировочный рефлекс как центральный узел

В обеих реализациях ОР является спусковым крючком для осознания и фиксации эпизодов.

2. Главные различия в архитектуре

2.1. Модель памяти

Характеристика

GO-версия

JS-версия

Структура ЭП

Дерево (EpisodicTree) с фиксированными уровнями

Линейный массив Episodes с индексом

Поиск правил

Рекурсивный обход дерева

Линейный поиск с фильтрацией

Учительские правила

PARAMS[0] == 100

Поле responseStimulusImageId

Абстракции

Отсутствуют

AbstractPerceptionImages, AbstractActionImages, semanticStructure

Ментальные правила

Отдельное дерево EpisodicMentalTree

Интегрированы через MentalRules_* и MentalAutomatizms

Анализ: JS-версия ввела принципиально новый слой — абстракции (клоны жестких образов). Это позволяет системе обобщать опыт на уровне «что если», а не только фиксировать произошедшее. GO-версия такой возможности не имеет.

2.2. Процесс осознания

Характеристика

GO-версия

JS-версия

Структура цикла

cycleInfo с полем step, count, dreaming

CycleInfo с step, count, thinkingMode, awaitingAutomatismEpisodeFeedback

Диспетчеризация

dispetchConsciousnessThinking() с пульсацией

Аналогичная, но с четким разделением на главный/фоновые

Уровни осознания

1–2 в consciousnessElementary, 3–4 в consciousnessThinking

1–2 в runElementary, 3–4 в runOneStep через отдельные модули

Гейты ожидания

LastRunAutomatizmPulsCount

awaitingAutomatismEpisodeFeedback + automatismOperatorAnswerReceived

Пассивный режим

dreaming флаг, GotoDreaming()

thinkingMode = 'passive', info_fantasizming()

Анализ: JS-версия ввела четкие гейты ожидания, предотвращающие повторный поиск правил, пока система ждет ответа. GO-версия использует более простой механизм, что может приводить к «дребезгу» при многократных вызовах.

2.3. Условные рефлексы

Характеристика

GO-версия

JS-версия

Структура

ConditionReflex с rank, lastActivation, birthTime

SynonymReflex с tryCount, isReady

Порог зрелости

2 сочетания (rank)

3 сочетания (REFLEX_READY_THRESHOLD)

Угасание

По времени (lastActivation - birthTime > 50)

Нет (только очистка по кнопке)

Формирование

updateNewsConditions() с накоплением в TriggerStimulsTempArr

synonyms_onGeneticActionFired() с проверкой контекста и стимулов

Анализ: GO-версия имеет более сложный механизм угасания, имитирующий забывание. JS-версия пока не реализует забывание, но имеет более чистую логику формирования (только при наличии >1 активного стимула).

2.4. Цели и мотивация

Характеристика

GO-версия

JS-версия

Базовые цели

Генетические цели через TerminalActionsTargetsFromID

getActiveBaseGoalVitalId() (только Плохо)

Жизненный опыт

PurposeGenetic (временный, не сохраняется)

GoalImagesLife (сохраняется в IndexedDB)

Произвольные цели

Отсутствуют

Заготовка (в комментариях)

Цель «значение»

Отсутствует

GOAL_KIND_MEANING_DEFAULT (умолчательная)

Цель «Плачь»

Отсутствует

GOAL_KIND_CRY_DEFAULT

Анализ: JS-версия ввела сохраняемые образы цели, что позволяет системе «помнить» успешные стратегии между сессиями. GO-версия цели существуют только в оперативной памяти.

2.5. Персистенция

Характеристика

GO-версия

JS-версия

Формат

Текстовые файлы (*.txt)

IndexedDB + JSON-файлы

Механизм

Прямая запись при изменении

Dirty-флаги + подписи состояний

Загрузка

При инициализации

Асинхронно, с резервным localStorage

Сохранение при закрытии

cleanupFunc() в main

beforeunload + saving_before_closing

Аварийное завершение

IsBeastDeath

was_emergency_shutdown флаг

Анализ: JS-версия использует более надежный механизм с dirty-флагами и подписями, что предотвращает лишние записи. GO-версия пишет при каждом изменении, что при большом объеме данных может быть неэффективно.

2.6. Вербальные сенсоры

Характеристика

GO-версия

JS-версия

Наличие

Полноценное дерево слов и фраз (WordTree, PhraseTree)

Отсутствует (уровни 4–6 дерева не используются)

Распознавание

WordDetection(), PhraseDetection()

—

Накопление

words_temp_arr.txt с порогами повторений

—

Описки

Альтернативное распознавание (первые/последние буквы)

—

Анализ: Это самое существенное различие. GO-версия реализует полноценную вербальную систему, что делает ее значительно сложнее. JS-версия сознательно исключила вербальный ввод, сосредоточившись на невербальной адаптивности. Это соответствует заявленной цели: «проект — не работающее существо и его воспитание, а наиболее адекватный способ реализации теории».

3. Различия в реализации отдельных адаптивных механизмов

3.1. Оценка эффекта

Аспект

GO-версия

JS-версия

Вычисление

BetterOrWorseNow() → commonDiffValue (от -10 до +10)

closeLastFrame() → effect = clamp(diffAfter - diffBefore)

Учет боли/радости

GomeostazActionEffectPainV и JoyV (из гомеостаза)

Нет прямого аналога

Учет учительских кнопок

Отдельная обработка IsPress3or4button

Через responseStimulusImageId в кадре

Передача в автоматизм

automatizmCorrection() с усреднением

addUsefulnessSample() с усреднением

Анализ: Обе системы используют усреднение, но JS-версия имеет единую точку вычисления эффекта (closeLastFrame), что исключает расхождение между ЭП и автоматизмами.

3.2. Конкуренция стимулов

Аспект

GO-версия

JS-версия

Актуальность

Новизна × значимость (в ОР)

Аналогично, с гистерезисом

Гистерезис

OR_HYSTERESIS = 0.5

Аналогично

Приоритет цепочек ЭП

Отсутствует

EpisodicMemory_getChainPriorityStimulusSet() (≥2 кадра подряд)

Порог прерывания

INTERRUPT_THRESHOLD_ATTENTION_RATIO

Аналогично, с учетом themeSituationMismatch

Анализ: JS-версия ввела приоритет цепочек ЭП, что позволяет не обрывать смысловые последовательности. Это важное улучшение для обучения с учителем.

3.3. Базовые контексты и эмоции

Аспект

GO-версия

JS-версия

Активация

По выходам виталов из нормы

Аналогично

Антагонисты

antagonists карта

Отсутствуют (контексты независимы)

Гистерезис

hysteresisLimitVal для смены CurStyleImage

Отсутствует

Удержание

keepingContextTime (20 пульсов)

state_retention_period (15 пульсов) через SetWellForHolding и др.

Эмоции

Emotion (сочетание контекстов)

Аналогично

Анализ: GO-версия имеет более сложную систему антагонистов и гистерезиса, что имитирует латеральное торможение. JS-версия упростила эту модель, но добавила явное удержание состояний.

3.4. Мозжечковые рефлексы (коррекция силы)

Аспект

GO-версия

JS-версия

Наличие

Полноценная система cerebellumReflex

Отсутствует

Механизм

addEnergy (от -10 до +10)

—

Дополнительные действия

additionalAutomatizmID

—

Анализ: GO-версия имеет сложную систему мозжечковой коррекции, которая в JS-версии не реализована. Это одно из направлений развития.

3.5. Гештальты и инсайты

Аспект

GO-версия

JS-версия

Структура

Dominanta (problemTreeID, objectID, targetActionID)

GestaltArr (goalImageId, status, analogyPool)

Буфер резонанса

Отсутствует

GestaltResonanceBuffer (FIFO сигнатур)

Аналогии

checkRelevantAction()

Gestalt_processResonanceBufferForCycle() с эвристическим score

Инсайты

toConsciousHeuristics()

registerInsight() с типами 'local', 'analogy', 'feedback'

Анализ: JS-версия имеет значительно более развитую систему гештальтов с кросс-цикловыми аналогиями через буфер резонанса. GO-версия доминанты привязаны к объектам и действиям, но не имеют механизма аналогий.

4. Оценка эффективности и требовательности к ресурсам

4.1. Вычислительная сложность

Операция

GO-версия

JS-версия

Поиск в ЭП по условиям

O(n) линейный обход дерева

O(1) через индексы (byPerceptionKey)

Семантический доступ

O(n) по массиву

O(1) через SemanticMemoryIndex[well][emotionId][finalImageId]

Поиск автоматизмов по ветке

O(n) по массиву

O(1) через byBranchId индекс

Условные рефлексы

O(n) по массиву

O(n) по массиву (потенциальное узкое место)

Дерево восприятия

O(n) рекурсивный обход

O(1) через pathIndex

Вывод: JS-версия значительно эффективнее за счет использования индексов и хеш-таблиц. GO-версия полагается на линейный обход и рекурсию, что при масштабировании может стать проблемой.

4.2. Потребление памяти

Аспект

GO-версия

JS-версия

Структуры данных

Много map с указателями

Срезы (slices) с индексами

Вербальные деревья

Полные деревья слов и фраз

Отсутствуют

Эпизодическая память

Дерево (дублирование условий)

Линейный массив

Абстракции

Отсутствуют

Дополнительные массивы клонов

Вывод: JS-версия потребляет меньше памяти, т.к. исключила вербальные деревья и использует более компактные структуры. Однако абстракции добавляют некоторый объем.

4.3. Скорость выполнения

Аспект

GO-версия

JS-версия

Общая производительность

Высокая (компилируемый язык)

Средняя (интерпретируемый)

Индексация

Отсутствует

Присутствует, компенсирует интерпретацию

Асинхронность

Горутины (потенциально сложно)

Event loop (проще)

Загрузка данных

Синхронная

Асинхронная

Вывод: Несмотря на то, что GO — компилируемый язык с высокой производительностью, JS-версия демонстрирует, что для данной архитектуры скорость языка не критична. Грамотная структура данных (индексы, хеш-таблицы) и дискретное время позволяют JS-версии работать эффективно даже в браузере.

4.4. Требования к железу

Аспект

GO-версия

JS-версия

Среда выполнения

Сервер (Go binary)

Браузер (клиент)

Потребление CPU

1 пульс/сек — минимально

1 пульс/сек — минимально

Потребление RAM

Умеренное (зависит от объема памяти)

Умеренное (зависит от объема)

Сетевая нагрузка

Нет (локальный сервер)

Нет (локальный)

Вывод: Обе системы нетребовательны к мощности компьютера. JS-версия демонстрирует, что сложная адаптивная система может работать в браузере на обычном ПК, не требуя серверного железа. Это подчеркивает некритичность применения высокоскоростных языков для данного класса задач.