Инфо-детекторы: алгоритмы активации, удержания и сброса
В этом документе перечислены все инфо-детекторы инфокартины, их числовые поля в InfoPicture и три группы условий для каждого:
- Активация — когда детектор становится активным (поле ≠ 0).
- Удержание — когда детектор продолжает оставаться активным.
- Сброс — когда детектор обязан вернуться в 0.
Общие принципы
- Значения детекторов целочисленные (или числа с плавающей точкой для «уровней»). Ноль всегда означает «не активно / не обнаружено».
- Каждая функция
InfoDet_updateXxx(...)вinfo_detectors.js:- принимает параметры из «места сбора информации» (виталы, контексты, эффекты ЭП, состояние ожидания и т.п.);
- сама решает, поставить ненулевое значение или сбросить в 0, исходя из трёх условий.
- Вызывающий код обязан передавать детектору актуальные данные при каждом существенном изменении (пульс, ОР, закрытие кадра ЭП, запуск/завершение ожидания и т.д.), даже если событие «не случилось» — чтобы детектор мог сам себя сбросить.
Детекторы условно делятся на:
- Снимковые (состояния) — могут пересчитываться по текущему снимку состояния (BadNormWell, BasicContextsActived, семантика и т.п.).
- Событийные — фиксируют момент/факт события во времени (конец ожидания без ответа, скачок новизны и т.п.). Для них условия удержания и сброса важны особенно.
1. Режим осмысления, Тема, Ситуация
1.1. Целевой режим осмысления (главный цикл ФО + ячейка «Режим»)
- Источник:
thinkingModeу главного цикла; UI —Consciousness_getMainCycleThinkingMode(). - Активация:
- При запуске реакции/автоматизма, который требует целевого осмысления (например, при OR с семантически значимым стимулом или при запуске цикла осмысления по
unsolved_problem): вызываетсяInfoDet_updateTargetMode(true).
- При запуске реакции/автоматизма, который требует целевого осмысления (например, при OR с семантически значимым стимулом или при запуске цикла осмысления по
- Удержание:
- Пока идёт целевой цикл осмысления или активен процесс оценки последствий автоматизма (период ожидания).
- Сброс:
- При завершении целевого цикла (проблема решена или признана неактуальной) и отсутствии условий для нового целевого осмысления →
InfoDet_updateTargetMode(false).
- При завершении целевого цикла (проблема решена или признана неактуальной) и отсутствии условий для нового целевого осмысления →
1.2. Текущая Тема (InfoPicture.themeId, ячейка «Тема»)
- Поле:
themeId:0— нет темы, >0 — ID образа темы из дерева ситуаций. - Активация:
- При каждом вызове
SituationsTree_onPerceptionTreeActivated()находящий best‑match готовый образ темы для текущего режима иtree.BaseID/EmotionID/ActivityID:- если найден готовый образ (ready и score>0) →
InfoDet_updateCurrentTheme(themeId).
- если найден готовый образ (ready и score>0) →
- При каждом вызове
- Удержание:
- Пока текущая комбинация (Base, Emotion, Activity) остаётся ближе всего к тому же готовому образу темы.
- Сброс:
- Если при очередной активации дерева ситуаций:
- нет готовых образов (все count ≤ 3),
- или ни один готовый образ не даёт ненулевого score,
→InfoDet_updateCurrentTheme(0).
- Если при очередной активации дерева ситуаций:
1.3. Текущая Ситуация (InfoPicture.situationId, ячейка «Ситуация»)
- Поле:
situationId:0— нет, >0 — ID образа ситуации из дерева ситуаций. - Активация:
- В
SituationsTree_onPerceptionTreeActivated()из детекторных полей инфокартины формируется вектор компонент; среди готовых образов выбирается best‑match:- при score>0 и ready=true →
InfoDet_updateCurrentSituation(situationId).
- при score>0 и ready=true →
- В
- Удержание:
- Пока текущий набор детекторов остаётся ближе всего к той же ситуации.
- Сброс:
- При следующем вызове, если:
- нет готовых ситуаций для текущего режима,
- или score==0 для всех,
→InfoDet_updateCurrentSituation(0).
- При следующем вызове, если:
2. Виталы и базовые контексты
2.1. Критический витал (InfoPicture.criticalVital, ячейка «Крит. витал»)
- Поле:
criticalVital:0— нет критического витала;>0— ID витала, значение которого >70 и максимально среди всех.
- Активация:
- В
updateImportanceMetrics(badVitals)илиgetActiveBasicContexts(cpuls):- сканировать
VitalsArrи найти витал сvalue > 70и максимальным значением; - если такой есть →
InfoPicture.criticalVital = vitalId.
- сканировать
- В
- Удержание:
- Пока при очередных вызовах остаётся витал с
value > 70; при смене «лидера» детектор обновляется на новый ID.
- Пока при очередных вызовах остаётся витал с
- Сброс:
- Если при следующем вызове ни один витал не превышает 70 →
criticalVital = 0.
- Если при следующем вызове ни один витал не превышает 70 →
2.2. Состояние Плохо (InfoPicture.badState, ячейка «Плохо»)
- Поле:
badState:0— не Плохо,1— Плохо (BadNormWell=1). - Активация:
- В
InfoDet_updateBadState(lastBadNormWell, badNormWell):- при
badNormWell === 1→badState = 1.
- при
- В
- Удержание:
- Пока
BadNormWellостаётся равным 1.
- Пока
- Сброс:
- При любом значении
BadNormWell != 1в следующем вызове →badState = 0.
- При любом значении
2.3. Резкое ухудшение состояния (InfoPicture.suddenChange, ячейка «Резк. изм.»)
- Поле:
suddenChange:0— нет;1— момент смены на Плохо (по PDF); можно хранить и более детальный уровень.
- Активация:
- В
InfoDet_updateBadState(lastBadNormWell, badNormWell):- если
lastBadNormWell !== 1иbadNormWell === 1→suddenChange = 1.
- если
- В
- Удержание:
- Это событийный детектор: можно держать
1в течение одного шага цикла осмысления или одного/нескольких пульсов (на ваше усмотрение), если нужно «увидеть» событие.
- Это событийный детектор: можно держать
- Сброс:
- При следующем вызове без повторной смены в Плохо →
suddenChange = 0.
- При следующем вызове без повторной смены в Плохо →
2.4. Игровой режим (InfoPicture.playMode, ячейка «Игра»)
- Поле:
playMode:0— нет,1— активен базовый контекст Игра. - Активация:
- В
getActiveBasicContextsпосле полученияBasicContextsActived:- если
BasicContextsActivedсодержит контекст сid == 11→playMode = 1.
- если
- В
- Удержание:
- Пока Игра остаётся в
BasicContextsActived.
- Пока Игра остаётся в
- Сброс:
- При следующем вызове, если контекст Игра не активен →
playMode = 0.
- При следующем вызове, если контекст Игра не активен →
2.5. Режим обучения (InfoPicture.learningMode, ячейка «Обучение»)
- Поле:
learningMode:0— нет,1— активен режим обучения. - Активация:
- В
InfoDet_updateLearningAndSearch(BasicContextsActived, VitalsArr):- если активен базовый контекст Любопытство (id=12) или витал «Интерес» имеет
value > 70→learningMode = 1.
- если активен базовый контекст Любопытство (id=12) или витал «Интерес» имеет
- В
- Удержание:
- Пока сохраняется хотя бы одно из условий (Любопытство или высокий Интерес).
- Сброс:
- При отсутствии Любопытства и Интерес≤70 →
learningMode = 0.
- При отсутствии Любопытства и Интерес≤70 →
2.6. Поисковый интерес (InfoPicture.searchInterest, ячейка «Поиск»)
- Поле:
searchInterest:0— нет,1— витал Интерес>70. - Активация:
- В
InfoDet_updateLearningAndSearch:- если витал с Id «Интерес» (договорённый Id, например 10) имеет
value > 70→searchInterest = 1.
- если витал с Id «Интерес» (договорённый Id, например 10) имеет
- В
- Удержание:
- Пока Интерес>70.
- Сброс:
- При следующем вызове при Интерес≤70 →
searchInterest = 0.
- При следующем вызове при Интерес≤70 →
2.7. Страх (InfoPicture.fear, ячейка «Страх»)
- Поле:
fear:0— нет,1— активен базовый контекст Страх. - Активация:
- В
getActiveBasicContexts:- если
BasicContextsActivedсодержит контекст id=6 (Страх) →fear = 1.
- если
- В
- Удержание:
- Пока контекст Страх остаётся активным.
- Сброс:
- При следующем вызове без id=6 →
fear = 0.
- При следующем вызове без id=6 →
2.8. Агрессия (InfoPicture.aggression, ячейка «Агрессия»)
- Поле:
aggression:0— нет,1— активен базовый контекст Агрессия. - Активация:
- Если
BasicContextsActivedсодержит контекст id=7 (Агрессия) →aggression = 1.
- Если
- Удержание:
- Пока контекст Агрессия активен.
- Сброс:
- При следующем вызове без id=7 →
aggression = 0.
- При следующем вызове без id=7 →
2.9. Защита (InfoPicture.defense, ячейка «Защита»)
- Поле:
defense:0— нет,1— активен режим защиты. - Активация:
- Если
fear == 1илиaggression == 1→defense = 1.
- Если
- Удержание:
- Пока страх или агрессия активны.
- Сброс:
- При
fear == 0иaggression == 0→defense = 0.
- При
3. Семантика и ориентировочный рефлекс
3.1. Стимул с Пульта (InfoPicture.consoleStimulus, ячейка «С пульта»)
- Поле:
consoleStimulus:0— нет стимула;>0—FinalImageIdпобедившего образа стимула.
- Активация:
- В
runOROnStimulusActivationпосле выбораwinnerId:InfoDet_updateConsoleStimulus(winnerId).
- В
- Удержание:
- Можно удерживать до следующего срабатывания ОР (последний актуальный стимул).
- Сброс:
- При явном отсутствии активных стимулов (все сняты) или по решению при смене ветки:
- вызывать
InfoDet_updateConsoleStimulus(0).
- вызывать
- При явном отсутствии активных стимулов (все сняты) или по решению при смене ветки:
3.2. Высокая семантическая значимость (InfoPicture.highSemanticImportance)
- Поле:
highSemanticImportance:0— нет;>0— средняя значимостьmeanImportanceв текущих условиях. - Активация:
- В
orientation_reflex.jsпосле полученияsemWinner:- если
meanImportance > 0→highSemanticImportance = meanImportance.
- если
- В
- Удержание:
- Пока текущий актуальный стимул (
winnerId) и условия (well, emotionId) не сменились.
- Пока текущий актуальный стимул (
- Сброс:
- При смене стимула/контекста (новое срабатывание ОР) или отсутствии семантики →
highSemanticImportance = 0.
- При смене стимула/контекста (новое срабатывание ОР) или отсутствии семантики →
3.3. Есть объект высокой значимости (InfoPicture.highImportanceObject)
- Поле:
highImportanceObject:0— нет;>0— ID актуального образа (FinalImageId), имеющего |semantics|>5. - Активация:
- В
orientation_reflex.js:- если
Math.abs(meanImportance) > 5→highImportanceObject = winnerId.
- если
- В
- Удержание:
- Пока текущий стимул тот же и условия близки.
- Сброс:
- При смене стимула/контекста или при
|meanImportance| ≤ 5→highImportanceObject = 0.
- При смене стимула/контекста или при
3.4. Новизна образа (InfoPicture.imageNovelty)
- Поле:
imageNovelty:0— нет;>0— значение novelty, если выше порога. - Активация:
- В
orientation_reflex.jsпосле расчётаnovelty:- если
novelty > threshold(порог из кода) →imageNovelty = novelty.
- если
- В
- Удержание:
- До следующего срабатывания ОР.
- Сброс:
- При новом ОР, когда
novelty ≤ threshold→imageNovelty = 0.
- При новом ОР, когда
3.5. Противоречивая семантика (InfoPicture.conflictingSemantics)
- Поле:
conflictingSemantics:0— нет;1— обнаружена противоречивая семантика. - Активация:
- Код анализа семантики (в модуле понимания) обнаруживает:
- средняя значимость близка к 0 при большом
samplesCount, - для разных условий есть как значительные положительные, так и значительные отрицательные значения.
- средняя значимость близка к 0 при большом
- В этом случае →
conflictingSemantics = 1.
- Код анализа семантики (в модуле понимания) обнаруживает:
- Удержание:
- Пока ситуация с противоречивой семантикой не разрешена.
- Сброс:
- Если при следующем анализе не выполняются признаки конфликта →
conflictingSemantics = 0.
- Если при следующем анализе не выполняются признаки конфликта →
4. Эффекты действий и автоматизмы
4.1. Положительный / Отрицательный эффект действия (positiveActionEffect, negativeActionEffect)
- Поля:
positiveActionEffect:0или >0 — величина последнего положительного эффекта;negativeActionEffect:0или <0 — величина последнего отрицательного эффекта.
- Активация:
- В
closeLastFrame(episodic_memory.js) после вычисленияlast.effect:- если
effect > 0→positiveActionEffect = effect,negativeActionEffect = 0; - если
effect < 0→negativeActionEffect = effect,positiveActionEffect = 0; - если
effect == 0→ оба 0.
- если
- В
- Удержание:
- Хранит значение последнего завершённого кадра ЭП.
- Сброс:
- При новом кадре без эффекта или при явном сбросе истории → оба = 0.
4.2. Негативный эффект моторного автоматизма (negativeMotorEffect)
- Поле:
negativeMotorEffect:0— нет;<0— негативный z в периоде ожидания моторного автоматизма. - Активация:
- При срабатывании моторного автоматизма и измерении
z = getDiffImportance()в периоде ожидания:- если
z < 0→negativeMotorEffect = z.
- если
- При срабатывании моторного автоматизма и измерении
- Удержание:
- Пока не произведена новая оценка
zдля другого моторного автоматизма.
- Пока не произведена новая оценка
- Сброс:
- При следующем измерении
z >= 0или завершении периода ожидания без негативного эффекта →negativeMotorEffect = 0.
- При следующем измерении
4.3. Негативный эффект ментального автоматизма (negativeMentalEffect)
- Аналогично моторному, но для автоматизмов, запущенных из функции осмысления (ментальных):
- при
z < 0в периоде ожидания →negativeMentalEffect = z, - при отсутствии/завершении — → 0.
- при
4.4. Низкая полезность автоматизма (lowAutomatismUsefulness)
- Поле:
lowAutomatismUsefulness:0— нет; |value| ≤ 1 — низкая полезность. - Активация:
- При каждом новом сэмпле
effectSample, записываемом в полезность автоматизма:- если
0 < |effectSample| ≤ 1→lowAutomatismUsefulness = effectSample.
- если
- При каждом новом сэмпле
- Удержание:
- Пока следующий сэмпл не показывает нормальный по модулю эффект (>1).
- Сброс:
- При
|effectSample| > 1илиeffectSample == 0→lowAutomatismUsefulness = 0.
- При
4.5. Пока найден подходящий автоматизм (foundSuitableAutomatism)
- Поле:
foundSuitableAutomatism:0— нет;1— цикл осмысления в целевом режиме нашёл и использует автоматизм. - Активация:
- При выборе и запуске подходящего автоматизма в целевом режиме →
foundSuitableAutomatism = 1.
- При выборе и запуске подходящего автоматизма в целевом режиме →
- Удержание:
- Пока цикл осмысления продолжает использовать этот автоматизм.
- Сброс:
- При завершении цикла или при отказе от автоматизма →
foundSuitableAutomatism = 0.
- При завершении цикла или при отказе от автоматизма →
5. Ожидание и ответы оператора
5.1. Нет реакции на стимул (noReactionToStimulus)
- Поле:
noReactionToStimulus:0— нет;1— зафиксировано отсутствие реакции на стимул. - Активация:
- В
EpisodicMemory_onPulse, когдаlast.actionImageId === nullи период ожидания истёк без реакции →noReactionToStimulus = 1.
- В
- Удержание:
- До следующего запуска ожидания или явного сброса.
- Сброс:
- При появлении реакции или при запуске нового ожидания →
noReactionToStimulus = 0.
- При появлении реакции или при запуске нового ожидания →
5.2. Игнорирование оператором (operatorIgnoring)
- Поле:
operatorIgnoring:0— нет;1— оператор проигнорировал действие. - Активация:
- В
EpisodicMemory_onPulse, якщоlast.actionImageId != null(была реакция/автоматизм) и период ожидания закончился без ответного стимула →operatorIgnoring = 1.
- В
- Удержание:
- Пока не получен ответный стимул в новом периоде ожидания.
- Сброс:
- В
orientation_reflex.js, при ответном стимуле в период ожидания (EpisodicMemory_isInWaitingPeriod):operatorIgnoring = 0.
- В
5.3. Ответ оператора получен (operatorAnswerReceived)
- Поле:
operatorAnswerReceived:0— нет;1— ответ оператора получен. - Активация:
- В
orientation_reflex.js, при срабатывании ОР в период ожидания и закрытии кадра с ответным стимулом →operatorAnswerReceived = 1.
- В
- Удержание:
- До следующего кадра ожидания или явного сброса.
- Сброс:
- При запуске нового периода ожидания или при обработке ответа →
operatorAnswerReceived = 0.
- При запуске нового периода ожидания или при обработке ответа →
5.4. Активное ожидание ответа (activeWaitingAnswer)
- Поле:
activeWaitingAnswer:0— нет;1— период ожидания результата автоматизма активен. - Активация:
- При создании кадра ЭП, связанного с автоматизмом (особенно ментальным, запущенным из осмысления) →
activeWaitingAnswer = 1.
- При создании кадра ЭП, связанного с автоматизмом (особенно ментальным, запущенным из осмысления) →
- Удержание:
- Пока период ожидания не завершён (ответ/таймаут).
- Сброс:
- При закрытии кадра (с ответом или без) →
activeWaitingAnswer = 0.
- При закрытии кадра (с ответом или без) →
5.5. Серия эпизодов без эффекта (seriesWithoutEffect)
- Поле:
seriesWithoutEffect:0— нет; >0 — длина последней серии кадров сeffect == 0. - Активация / удержание:
- Логика в ЭП увеличивает счётчик при каждом закрываемом кадре с
effect == 0и обнуляет при появлении ненулевого эффекта; при каждом изменении длины вызываетсяInfoDet_updateSeriesWithoutEffect(length).
- Логика в ЭП увеличивает счётчик при каждом закрываемом кадре с
- Сброс:
- При появлении эффекта (
effect != 0) или при явном сбросе ЭП →seriesWithoutEffect = 0.
6. Осмысление и трудные проблемы
Эти детекторы зависят от реализации цикла осмысления (conscience_level_2) и работы с unsolved_problem.
6.1. Обучение с учителем (teacherLearning)
- Поле:
teacherLearning:0— нет;1— включён режим обучения с учителем. - Активация:
- Когда функция осмысления фиксирует, что по конкретному образу имеется нерешённая проблема, которая остаётся нерешённой в течение непрекращающегося цикла попыток решения (несколько шагов целевого осмысления подряд).
- Удержание:
- Пока продолжается режим «передачи инициативы» оператору: система отслеживает его действия и провоцирует на ответы.
- Сброс:
- При решении проблемы (ответ оператора или найдено внутреннее решение), либо по истечении заданного лимита шагов →
teacherLearning = 0.
- При решении проблемы (ответ оператора или найдено внутреннее решение), либо по истечении заданного лимита шагов →
6.2. Неудовлетворённость существующим (dissatisfaction)
- Поле:
dissatisfaction:0— нет;1— есть неудовлетворённость. - Активация:
- Когда базовый контекст Покой активен, нет актуальных стимулов и завершён цикл осмысления в пассивном режиме (дошёл до конца без новых идей/изменений).
- Удержание:
- Пока внешние условия не изменятся или не появится новый стимул/интерес.
- Сброс:
- При активизации новых стимулов, смене контекста или запуске целевого цикла →
dissatisfaction = 0.
- При активизации новых стимулов, смене контекста или запуске целевого цикла →
6.3. Непонимание (misunderstanding)
- Поле:
misunderstanding:0— нет;1— состояние непонимания. - Активация:
- Если цикл осмысления дошёл до конца в целевом режиме или число шагов итерации превысило заданный предел (например, 10), и проблема не решена.
- Удержание:
- Пока цикл не перезапущен с иными условиями или проблема не решена.
- Сброс:
- При решении проблемы или перезапуске цикла с новой конфигурацией →
misunderstanding = 0.
- При решении проблемы или перезапуске цикла с новой конфигурацией →
6.4. Сомнение в штатном автоматизме (doubtInDefaultAutomatism)
- Поле:
doubtInDefaultAutomatism:0— нет;1— есть сомнение. - Активация:
- При старте второго уровня осмысления в целевом режиме для ветки, где штатный автоматизм даёт неоднозначные/неприемлемые результаты.
- Удержание:
- Пока второй уровень рассматривает альтернативы штатному автоматизму.
- Сброс:
- При выборе нового штатного автоматизма или подтверждении старого →
doubtInDefaultAutomatism = 0.
- При выборе нового штатного автоматизма или подтверждении старого →
6.5. Трудная проблема (hardProblem)
- Поле:
hardProblem:0— нет; >0 — уровень/счётчик «трудности» проблемы по образу. - Активация / удержание:
- Для каждого образа (стимула/ситуации) ведётся счётчик случаев, когда:
- есть
unsolved_problemпо этому образу, - целевой цикл доходит до конца без решения,
- число шагов цикла осмысления превышает порог.
- есть
- При каждом таком случае
hardProblemдля текущего образа увеличивается и передаётся вInfoDet_updateHardProblem(level).
- Для каждого образа (стимула/ситуации) ведётся счётчик случаев, когда:
- Сброс:
- При решении проблемы (образ помечается решённым) → уровень обнуляется, образ удаляется из массива «трудных проблем»,
hardProblem = 0.
- При решении проблемы (образ помечается решённым) → уровень обнуляется, образ удаляется из массива «трудных проблем»,
Этот документ задаёт целевые алгоритмы для всех инфо-детекторов; реализации функций InfoDet_update... в info_detectors.js должны следовать этим правилам, а вызовы этих функций в коде (в prepare.js, orientation_reflex.js, episodic_memory.js, conscience_level_2.js и др.) должны подавать им нужные параметры при каждом изменении релевантного состояния.
*** End Patch***
*** End Patch