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; }
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; }