Пакет psy_Tasks


Локальная Цель действий или целевой смысл, целевая задача.
(как значимость того, как может измениться состояние при достижении этой Цели)
Локальная цель реализуется в рамках глобального самоощущения CurrentSelfPerception (доминирующей темы)
и его мотивационных контекстов:
Motivation1level
Motivation2level
Motivation3level

Цель - измененное состояние, которое определяется при активации Дерева,
т.е. то изменение параметров, к которым можно стремиться как к поставленной задаче, например, пополнить энергию на столько-то.
Цели получаются в виде изменения параметров (предопределенных типов - Object) состояния Бота.

Локальные Цели есть в структурах:
Vocabulary - словарном запасе
levelModel - узлаз Дерева
EpisodeMemory - эпизодической памяти
Dominanta - Доминанте


Для последних узлов веток Дерева создается Цель, которая привязывается к эпизодической памяти
потому как это может быть кадр памяти с NodeID[] нескольких активировавшихся веток - обобщенная цель


Чтобы произвольно определить (поставить) Цель, нужно создать нужную Task и подставить TaskID для доминанты.

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

Вот типичные случаи:
1. Предположительная (поставленная) Цель: если был запущен автоматизм, то в эпизод.памяти активации ветки с этим автоматизмом запишется его результат
- как изменение состояния, а следующая активация Дерева породит эпизод память с реально изменившимися параметрами состояния Бота.
Так что Цель может быть задана авторитарно - в качестве обещания конкретного вида изменений
	- при авторитарной прошивке мот.автоматизмов указывается цель для текущего эпизода памяти.
Или если задан ученический вопрос, то оператор конкретизирует цель, которая будет достигнута при следовании подсказке.
Или оператор выскажет на словах, что произойдет (когда Бот будет уже способен понять это).
2. Реально проявившаяся Цель: отзеркалена у оператора - как замеченный результат его действий на своей шкуре,
 - если после действий оператора что-то случилось,
то нужно перевести это в виде Task struct и привязать к узлу Дерева, активировавшемуся при этом.
3. Реально проявившаяся Цель: при активации Дерева записываются изменения по сравнению с прошлой активной веткой,
в частности, отзеркалена наблюдением (исследованием), когда какое-то действие приводит к результату,
это прописывается как цель.
т.е. собственные действия или подтверждают достижение имеющейся предположительной цели из предыдущей памяти
или выявляют другой результат и тогда прописывается еще одна цель.

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

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

В одной Цели может быть только один из имеющихся параметров состояния Бота,
поэтому если изменяются несколько параметров, то нужно прописывать и несколько целей.
Это позволяет искать только нужную в данный момент Цель. И это минимизирует ресурсы для записи Целей.
НО есть одна "виртуальная" (т.е. подразумеваемая при отсутствии связи с узлом, где нет связи с целями)
это - умолчательная Цель для всех конечных узлов всех веток
- достигать улучшения жизненных параметров и достигать состояния Хорошо.
Так что при авторитарном приписывании мот.автоматизма можно не прописывать Цель,
а просто имеется в виду, что совет поможет достичь умолчательной Цели.

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

Цель связывается с предыдущей эпиз.памятью потому, что именно те действия могли так изменить ситуацию.
Вопрос о причинах изменения не может быть точным: то ли тье действия, то ли другие, то ли вообще что-то новое,
но других критериев нет и в природе постоянно сбиваются системы адаптации на этом вопросе,
пример- вывод, что головокружение - следствие отравления и нужно стошнить, хотя причиной может быть многое другое.
Главное, в памяти есть указание: после действий (своего или с Пульта - неважно) произошло такое-то изменение.
Это можно осознанно анализировать на основе имеющегося опыта.

Цели запоминаются в файле bot_files_next/tasks.txt

СТРУКТУРА:
type Task struct {
	ID int
/*Mood - безусловно-рефлекторная оценка того, насколько стало хуже или лучше
Основа для субъективной оценки своего состояния.
  Это автоматический совокупный показатель на освнове изменений
  1) гомео параметров и 2) базовых контекстов
  На этой основе происходит конкуренция Целей при их выборе
  и, как следствие, произвольная оценка эмоционального состояния.
  ПРОИЗВОЛЬНАЯ АКТИВАЦИЯ ЭМОЦИЙ происходит в функциях:
  VolutionNodeActivation() UpdateBaseEmotions() VolutionEmotionActivation() и BotVolutionEmotionActivation()
 */
	Mood int // -10 0 +10 изменение настроения

//  если Цель в достижении такогой эмоции:
	EmotionID int // >0 - такая эмоция возникла

/* достижение активации конечного узла ветки Дерева (например, с ID=390 - Накормить)
Даже если было активировано несколько веток длинной фразой,
то EpisodeMemoryID записывается вех их в ходе опыта
чтобы было видно, какого результата можно достичь, если цель будет достигнута
 */
	EpisodeMemoryID int

/*  Мотивационный смысл - прошитые мотивации
*/
	Motivation2level int
// - 1 это предполагаемая цель, 2 - это реальный результат изменений
	Hypothes int 
	Result int // - рейтинг важности цели от 0 - до 10 - для конкурентности с другими целями.
	// авторитарно можно сразу установить высокий Result при Hypothes==1
}
////////////////////////////////////////////
ПЕРЕМЕННЫЕ:
// массив имеющихся целей Бота
var Tasks=make(map[int]*Task)

/* массив привязок цели к эпизод.памяти:
идекс массива==nodeID открывает []*Tasks, которые привязаны к этому кадру эпизод.памяти
/* текущие изменения состояния Бота, на которые нужно обратить внимание (если DiffActiveTask!=nil) и конкретизировать Цель,
обеспечивая оптимальное реагирование по ней.
Изменяется при активации Доминанты - CurrentDominanta.
 */
var CurrentActiveTask *Task
var OldActiveTask *Task  // для сравнения изменений и понимания их вектора
var DiffMoodTasks Task // разница в Mood между MoodCurrentActiveTask и OldActiveTask

var TaskEpisodeMemory=make(map[int]int)

ФУНКЦИИ:
•	привязать цель к эпизод.памяти
•	создание новой Цели
•	Запись Целей в файл
•	считывание Целей из файла
•	Авторитарно прописываемая предположительная Цель в новом эпизоде Памяти EpisodeMemoryActiveFrame, который возникает после активации Дерева
•	сравнить Цели по главным признакам