Пример #1
0
        public double[] mcmcAsk(String X, Dictionary <String, bool> evidence,
                                int numberOfVariables, Randomizer r)
        {
            double[]                  retval = new double[2];
            List <String>             _nonEvidenceVariables = nonEvidenceVariables(evidence, X);
            Dictionary <String, bool> evt = createRandomEvent(
                _nonEvidenceVariables, evidence, r);

            for (int j = 0; j < numberOfVariables; j++)
            {
                foreach (string variable in _nonEvidenceVariables)
                {
                    BayesNetNode              node    = getNodeOf(variable);
                    List <BayesNetNode>       blanket = markovBlanket(node);
                    Dictionary <string, bool> mb      = createMBValues(blanket, evt);
                    // event.put(node.getVariable(), node.isTrueFor(
                    // r.getProbability(), mb));
                    evt[node.getVariable()] = truthValue(rejectionSample(node
                                                                         .getVariable(), mb, 100, r), r);
                    bool queryValue = evt[X];
                    if (queryValue)
                    {
                        retval[0] += 1;
                    }
                    else
                    {
                        retval[1] += 1;
                    }
                }
            }
            return(Util.normalize(retval));
        }