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