Exemple #1
0
int GibbsMPEForMNet( float eps)
{

    std::cout<<std::endl<<"Gibbs MPE for MNet"<< std::endl;

    pEvidencesVector evidences;

    CGibbsSamplingInfEngine *pGibbsInf;

    int ret = 1;
    CMNet* pMNet = myCreateDiscreteMNet();
    pMNet->GenerateSamples( &evidences, 1 );

    const int ndsToToggleMNet[] = { 0, 3 };

    evidences[0]->ToggleNodeState( 2, ndsToToggleMNet );

    pGibbsInf = CGibbsSamplingInfEngine::Create(pMNet);

    intVecVector queries(1);
    //pGibbsInf->SetParemeter(pMaxTime, 500);
    queries[0].clear();

    queries[0].push_back(0);
    queries[0].push_back(3);


    pGibbsInf->SetQueries(queries);

    pGibbsInf->EnterEvidence( evidences[0], 1 );

    CNaiveInfEngine* pInf = CNaiveInfEngine::Create(pMNet);

    pInf->EnterEvidence( evidences[0], 1 );

    const int querySzMNet = 2;
    const int queryMNet[] = {0, 3};

    pGibbsInf->MarginalNodes( queryMNet,querySzMNet );
    pInf->MarginalNodes( queryMNet,querySzMNet );

    const CEvidence *pEvGibbs = pGibbsInf->GetMPE();
    const CEvidence *pEvInf = pInf->GetMPE();
    int i;
    for( i = 0; i < querySzMNet; i++ )
    {
        if( pEvGibbs->GetValueBySerialNumber(i)->GetInt() != 
            pEvInf->GetValueBySerialNumber(i)->GetInt() )
        {
            ret = 0;
            break;
        }
    }

   
    std::cout<<"result of gibbs"<<std::endl;
    pEvGibbs->Dump();
    std::cout<<std::endl<<"result of naive"<<std::endl;
    pEvInf->Dump();



    delete pInf;
    delete pGibbsInf;
    delete evidences[0];
    delete pMNet;
    ////////////////////////////////////////////////////////////////////////////////////////
    return ret;

}
Exemple #2
0
int GibbsForMNet(float eps)
{

    std::cout<<std::endl<<"Gibbs for discrete MNet"<< std::endl;

    pEvidencesVector evidences;

    CGibbsSamplingInfEngine *pGibbsInf;

    int ret;
    CMNet* pMNet = myCreateDiscreteMNet();
    pMNet->GenerateSamples( &evidences, 1 );

    const int ndsToToggleMNet[] = { 0, 3 };

    evidences[0]->ToggleNodeState( 2, ndsToToggleMNet );

    pGibbsInf = CGibbsSamplingInfEngine::Create(pMNet);

    intVecVector queries(1);
    //pGibbsInf->SetParemeter(pMaxTime, 500);
    queries[0].clear();

    queries[0].push_back(0);
    queries[0].push_back(3);


    pGibbsInf->SetQueries(queries);

    pGibbsInf->EnterEvidence( evidences[0] );

    CNaiveInfEngine* pInf = CNaiveInfEngine::Create(pMNet);

    pInf->EnterEvidence( evidences[0] );

    const int querySzMNet = 2;
    const int queryMNet[] = {0, 3};

    pGibbsInf->MarginalNodes( queryMNet,querySzMNet );
    pInf->MarginalNodes( queryMNet,querySzMNet );

    const CPotential *pQueryPot1MNet = pGibbsInf->GetQueryJPD();
    const CPotential *pQueryPot2MNet = pInf->GetQueryJPD();

    ret = pQueryPot1MNet-> IsFactorsDistribFunEqual( pQueryPot2MNet, eps, 0 );

    std::cout<<"result of gibbs"<<std::endl;
    pQueryPot1MNet->Dump();
    std::cout<<std::endl<<"result of naive"<<std::endl;
    pQueryPot2MNet->Dump();



    delete pInf;
    delete pGibbsInf;
    delete evidences[0];
    delete pMNet;
    ////////////////////////////////////////////////////////////////////////////////////////
    return ret;

}