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