Я пытаюсь создать динамическую байесовскую сеть для изучения параметров с использованием байесовского сервера на C # в моей игре Unity. Реализация основана на этой статье .
Краткое объяснение модели, показанной на рисунке ниже: Когда игрок начинает играть на уровне, я назначаю ему начальную вероятность 0,5, что он уже знает материал, который он изучает, который представлен как узел Prior в показанной сети со связанной переменной, называемой priorKnowledge
. Этот предыдущий узел связан с узлом Знания, который является скрытым узлом, представляющим скрытую переменную LearnRate
, и его необходимо изучить в процессе игры. Этот узел, в свою очередь, связан с узлом Вопроса, который имеет два состояния, правильные или неправильные, в зависимости от того, правильно или неправильно игрок отвечает на вопрос. В зависимости от состояния предыдущего узла и узла вопроса, скорость обучения вычисляется и используется как приоритет для следующего уровня, как только очищенные уровни будут очищены.
У меня есть следующий фрагмент кода для создания сети в C # с использованием библиотеки сервера Байеса. Тем не менее, мне нужно установить начальное значение предыдущего и я не могу найти способ сделать это. В классе Variable
нет метода, который позволил бы мне присвоить ему значение. Как мне это сделать?
void initializeNetworkForLevel(int numberOfDistractors, int levelId)
{
beliefnet = new BayesServer.Network();
// add an intial knowledge node
priorKnowledge = new Variable("PriorKnowledge", VariableValueType.Continuous, VariableKind.Probability);
// initialize the priorKnowledge value to 0.5 if level = 1, else set it to learn rate
priorKnowledgeNode = new Node("Prior", priorKnowledge);
beliefnet.Nodes.Add(priorKnowledgeNode);
// add a knowledge node which is a latent variable (parameter to be learned from observed values
learnRate = new Variable("LearnRate", VariableValueType.Continuous, VariableKind.Probability);
knowledgeNode = new Node("Knowledge", learnRate);
beliefnet.Nodes.Add(knowledgeNode);
// add a link from prior node to knowledge node
beliefnet.Links.Add(new Link(priorKnowledgeNode, knowledgeNode));
// add a question node, which denotes the oberved variable whether the question is answered correctly or not
// this node has two states, namely correct or incorrect
State correct = new State("Correct");
State inCorrect = new State("Inorrect");
questionNode = new Node("Question", correct, inCorrect);
beliefnet.Nodes.Add(questionNode);
// add a link from knowledge node to question node
beliefnet.Links.Add(new Link(knowledgeNode, questionNode));
}