void ShowResultsForInference(const CPotential * pQueryPot, int slice) { int nnodes; const int* domain; pQueryPot->GetDomain( &nnodes, &domain ); std::cout<<" probability distribution for nodes [ "; int i; for( i = 0; i < nnodes; i++ ) { std::cout<<domain[i]<<" "; } std::cout<<"] at slice "<<slice<<std::endl; CMatrix<float>* pMat = pQueryPot->GetMatrix(matTable); // graphical model hase been created using dense matrix // so, the marginal is also dense EMatrixClass type = pMat->GetMatrixClass(); if( ! ( type == mcDense || type == mcNumericDense || type == mc2DNumericDense ) ) { assert(0); } int nEl; const float* data; static_cast<CNumericDenseMatrix<float>*>(pMat)->GetRawData(&nEl, &data); for( i = 0; i < nEl; i++ ) { std::cout<<" "<<data[i]; } std::cout<<std::endl; }
void ShowCPD( const CCPD* pCPD ) { int nnodes; const int* domain; pCPD->GetDomain( &nnodes, &domain ); std::cout<<" node "<<domain[nnodes -1]<<" hase the parents "; int i; for( i = 0; i < nnodes - 1; i++ ) { std::cout<<domain[i]<<" "; } std::cout<<std::endl; CMatrix<float>* pMat = pCPD->GetMatrix(matTable); // graphical model hase been created using dense matrix EMatrixClass type = pMat->GetMatrixClass(); if( ! ( type == mcDense || type == mcNumericDense || type == mc2DNumericDense ) ) { assert(0); } std::cout<<" conditional probability distribution \n"; int nEl; const float* data; static_cast<CNumericDenseMatrix<float>*>(pMat)->GetRawData(&nEl, &data); for( i = 0; i < nEl; i++ ) { std::cout<<" "<<data[i]; } std::cout<<std::endl<<std::endl; }
CPNLBase * CPersistCondGaussianDistribFun::Load(CContextLoad *pContext) { int nNode; bool bFactor; bool isUnitFun; CCondGaussianDistribFun *pDF; const CNodeType *const* ppNodeType; LoadForDistribFun(&isUnitFun, &nNode, &ppNodeType, pContext); pContext->GetAttribute(&nNode, "NumberOfNodes"); pContext->GetAttribute(&bFactor, "IsFactor"); CMatrix<CGaussianDistribFun*> *mat = static_cast<CMatrix<CGaussianDistribFun*>*>( pContext->Get("DistributionMatrix")); bool isDense(mat->GetMatrixClass() == mcDense); //dynamic_cast<CSparseMatrix<CGaussianDistribFun*>*>(mat) == 0; pDF = CCondGaussianDistribFun::Create(bFactor ? 1:0, nNode, ppNodeType, isDense); CMatrixIterator<CGaussianDistribFun*> *it = mat->InitIterator(); intVector index; for(; mat->IsValueHere(it); mat->Next(it)) { mat->Index(it, &index); pDF->SetDistribFun(*mat->Value(it), &index.front()); } delete it; return pDF; }
void CSamplingInfEngine::Normalization(CPotential *pot) { if( pot->GetDistributionType() != dtTabular ) { const pConstNodeTypeVector *nt = pot->GetDistribFun()->GetNodeTypesVector(); CDistribFun *pUnitFun = CGaussianDistribFun:: CreateUnitFunctionDistribution(nt->size(), &nt->front()); pot->SetDistribFun(pUnitFun); delete pUnitFun; } else { CMatrix< float > *pMatToSample; pMatToSample = static_cast<CTabularDistribFun*>(pot->GetDistribFun()) ->GetMatrix(matTable); EMatrixClass mc = pMatToSample->GetMatrixClass(); if( mc != mcNumericDense || mc != mc2DNumericDense ) { CMatrixIterator<float>* iter = pMatToSample->InitIterator(); for( iter; pMatToSample->IsValueHere( iter ); pMatToSample->Next(iter) ) { *const_cast<float*>(pMatToSample->Value( iter )) = 1.0f;; } delete iter; } else { floatVector *data = const_cast< floatVector *>( static_cast<CNumericDenseMatrix<float>*>(pMatToSample)->GetVector()); floatVector::iterator it1 = data->begin(); floatVector::iterator it2 = data->end(); for( ; it1 != it2; it1++ ) { *it1 = 1.0f; } } } }
void Infer_Process(const CBNet* pBnet) { //create simple evidence for node 0 from BNet CEvidence* pEvidForWS = CreateEvidenceForBNet(pBnet); //create Naive inference for BNet CNaiveInfEngine* pNaiveInf = CNaiveInfEngine::Create( pBnet ); //enter evidence created before pNaiveInf->EnterEvidence( pEvidForWS ); //set the query node int numQueryNds = 1;//*<- int queryNds[] = { 3 };//*<- //get a marginal for query set of nodes pNaiveInf->MarginalNodes( queryNds, numQueryNds ); const CPotential* pMarg = pNaiveInf->GetQueryJPD(); //display the evidence node and such velue of BNet intVector obsNds; pConstValueVector obsVls; pEvidForWS->GetObsNodesWithValues(&obsNds, &obsVls); int i; for( i = 0; i < obsNds.size(); i++ ) { std::cout<<" observed value for node "<<obsNds[i]; std::cout<<" is "<<obsVls[i]->GetInt()<<std::endl; } //display the query node and such velue of BNet int nnodes; const int* domain; pMarg->GetDomain( &nnodes, &domain ); std::cout<<" inference results: \n"; std::cout<<" probability distribution for nodes [ "; for( i = 0; i < nnodes; i++ ) { std::cout<<domain[i]<<" "; } std::cout<<"]"<<std::endl; CMatrix<float>* pMat = pMarg->GetMatrix(matTable); // graphical model hase been created using dense matrix // so, the marginal is also dense EMatrixClass type = pMat->GetMatrixClass(); if( ! ( type == mcDense || type == mcNumericDense || type == mc2DNumericDense ) ) { assert(0); } int nEl; const float* data; static_cast<CNumericDenseMatrix<float>*>(pMat)->GetRawData(&nEl, &data); for( i = 0; i < nEl; i++ ) { std::cout<<" "<<data[i]; } std::cout<<std::endl; delete pEvidForWS; delete pNaiveInf; }