Как задать начальные значения вероятности для переменных в динамической байесовской сети, используя байесовский сервер - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь создать динамическую байесовскую сеть для изучения параметров с использованием байесовского сервера на C # в моей игре Unity. Реализация основана на этой статье .

Краткое объяснение модели, показанной на рисунке ниже: Когда игрок начинает играть на уровне, я назначаю ему начальную вероятность 0,5, что он уже знает материал, который он изучает, который представлен как узел Prior в показанной сети со связанной переменной, называемой priorKnowledge. Этот предыдущий узел связан с узлом Знания, который является скрытым узлом, представляющим скрытую переменную LearnRate, и его необходимо изучить в процессе игры. Этот узел, в свою очередь, связан с узлом Вопроса, который имеет два состояния, правильные или неправильные, в зависимости от того, правильно или неправильно игрок отвечает на вопрос. В зависимости от состояния предыдущего узла и узла вопроса, скорость обучения вычисляется и используется как приоритет для следующего уровня, как только очищенные уровни будут очищены. enter image description here

У меня есть следующий фрагмент кода для создания сети в 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));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...