当前位置: 首页>>代码示例>>C++>>正文


C++ CBNet::AllocFactors方法代码示例

本文整理汇总了C++中CBNet::AllocFactors方法的典型用法代码示例。如果您正苦于以下问题:C++ CBNet::AllocFactors方法的具体用法?C++ CBNet::AllocFactors怎么用?C++ CBNet::AllocFactors使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在CBNet的用法示例。


在下文中一共展示了CBNet::AllocFactors方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: GibbsForScalarGaussianBNet

int GibbsForScalarGaussianBNet( float eps)
{
    std::cout<<std::endl<<" Scalar gaussian BNet (5 nodes)"<< std::endl;
    CBNet *pBnet;
    pEvidencesVector evidences;

    CGibbsSamplingInfEngine *pGibbsInf;
    const CPotential *pQueryPot1, *pQueryPot2;
    int i, ret;

    ////////////////////////////////////////////////////////////////////////
    //Do the example from Satnam Alag's PhD thesis, UCB ME dept 1996 p46
    //Make the following polytree, where all arcs point down
    //
    // 0   1
    //  \ /
    //   2
    //  / \
    // 3   4
    //
    //////////////////////////////////////////////////////////////////////

    int nnodes = 5;
    int numnt = 1;
    CNodeType *nodeTypes = new CNodeType[numnt];
    nodeTypes[0] = CNodeType(0,1);

    intVector nodeAssociation = intVector(nnodes,0);

    int nbs0[] = { 2 };
    int nbs1[] = { 2 };
    int nbs2[] = { 0, 1, 3, 4 };
    int nbs3[] = { 2 };
    int nbs4[] = { 2 };
    ENeighborType ori0[] = { ntChild };
    ENeighborType ori1[] = { ntChild };
    ENeighborType ori2[] = { ntParent, ntParent, ntChild, ntChild };
    ENeighborType ori3[] = { ntParent };
    ENeighborType ori4[] = { ntParent };
    int *nbrs[] = { nbs0, nbs1, nbs2, nbs3, nbs4 };
    ENeighborType *orient[] = { ori0, ori1, ori2, ori3, ori4 };
    intVector numNeighb = intVector(5,1);
    numNeighb[2] = 4;
    CGraph *graph;
    graph = CGraph::Create(nnodes, &numNeighb.front(), nbrs, orient);

    pBnet = CBNet::Create( nnodes, numnt, nodeTypes, &nodeAssociation.front(),graph );
    pBnet->AllocFactors();

    for( i = 0; i < nnodes; i++ )
    {
	pBnet->AllocFactor(i);
    }
    //now we need to create data for factors - we'll create matrices
    floatVector smData = floatVector(1,0.0f);
    floatVector bigData = floatVector(1,1.0f);
    intVector ranges = intVector(2, 1);
    ranges[0] = 1;
    smData[0] = 1.0f;
    CNumericDenseMatrix<float> *mean0 = CNumericDenseMatrix<float>::Create( 2, &ranges.front(), &smData.front());
    bigData[0] = 4.0f;

    CNumericDenseMatrix<float> *cov0 = CNumericDenseMatrix<float>::Create( 2, &ranges.front(), &bigData.front());
    pBnet->GetFactor(0)->AttachMatrix(mean0, matMean);
    pBnet->GetFactor(0)->AttachMatrix(cov0, matCovariance);

    float val = 1.0f;

    CNumericDenseMatrix<float> *mean1 = CNumericDenseMatrix<float>::Create( 2, &ranges.front(), &val );
    CNumericDenseMatrix<float> *cov1 = CNumericDenseMatrix<float>::Create( 2, &ranges.front(), &val );
    pBnet->GetFactor(1)->AttachMatrix(mean1, matMean);
    pBnet->GetFactor(1)->AttachMatrix(cov1, matCovariance);
    smData[0] = 0.0f;

    CNumericDenseMatrix<float> *mean2 = CNumericDenseMatrix<float>::Create(2, &ranges.front(), &smData.front());
    smData[0] = 2.0f;

    CNumericDenseMatrix<float> *w21 = CNumericDenseMatrix<float>::Create(2, &ranges.front(), &smData.front());
    bigData[0] = 2.0f;

    CNumericDenseMatrix<float> *cov2 = CNumericDenseMatrix<float>::Create(2, &ranges.front(), &bigData.front());
    bigData[0] = 1.0f;

    CNumericDenseMatrix<float> *w20 = CNumericDenseMatrix<float>::Create(2, &ranges.front(), &bigData.front());
    pBnet->GetFactor(2)->AttachMatrix( mean2, matMean );
    pBnet->GetFactor(2)->AttachMatrix( cov2, matCovariance );
    pBnet->GetFactor(2)->AttachMatrix( w20, matWeights,0 );
    pBnet->GetFactor(2)->AttachMatrix( w21, matWeights,1 );

    val = 0.0f;

    CNumericDenseMatrix<float> *mean3 = CNumericDenseMatrix<float>::Create(2, &ranges.front(), &val);
    val = 4.0f;
    CNumericDenseMatrix<float> *cov3 = CNumericDenseMatrix<float>::Create(2, &ranges.front(), &val);

    smData[0] = 1.1f;

    CNumericDenseMatrix<float> *w30 = CNumericDenseMatrix<float>::Create(2, &ranges.front(), &smData.front());
    pBnet->GetFactor(3)->AttachMatrix( mean3, matMean );
    pBnet->GetFactor(3)->AttachMatrix( cov3, matCovariance );
//.........这里部分代码省略.........
开发者ID:billryan,项目名称:OpenPNL,代码行数:101,代码来源:AGibbsInfEngine.cpp

示例2: types

CBNet *CreateTestTabularNetWithDecTreeNodeBNet()
{
	//   Baysam network     
	//        0 1...8 9       0,1, 9- discrete nodes distribution type is tabular, size is 2
	//        \ \  / /      10 - is discrete desigion tree node
	//            10        
	//          
	//      
	//
	// Desigion tree on the node 10 is
	//
	//     0
	//    / \	
	//   1	 2
	//  / \ / \
	// 3  4 5  6
	//  	   
    const int nnodes = 11; //Number of nodes
    const int numNt =  1; //number of Node types (all nodes are discrete)
    CNodeType* nodeTypes = new CNodeType [numNt];
	int size = 2;
    int i;
	nodeTypes[0] = CNodeType( 1,size );
    int *nodeAssociation = new int[nnodes];
    for( i = 0; i < nnodes; i++ )
	{
		nodeAssociation[i] = 0;
	};
    int *numOfNeigh;
    numOfNeigh = new int[nnodes];

	for( i = 0; i < nnodes - 1; i++ )
	{
		numOfNeigh[i] = 1;
	};
	numOfNeigh[nnodes - 1] = nnodes - 1;

    int **neigh;
	neigh = new int*[nnodes];
    for( i = 0; i < nnodes - 1; i++ )
	{
		neigh[i] = new int;
		neigh[i][0] = nnodes - 1;

	};
	neigh[nnodes - 1] = new int[nnodes - 1];

    for( i = 0; i < nnodes - 1; i++ )
	{
		neigh[nnodes - 1][i] = i;
	};

	ENeighborType **orient;
    orient = new ENeighborType*[nnodes];

	for( i = 0; i < nnodes - 1; i++ )
	{
		orient[i] = new ENeighborType;
		orient[i][0] = ntChild;

	};
    
	orient[nnodes - 1] = new ENeighborType[nnodes - 1];

	for( i = 0; i < nnodes - 1; i++ )
	{
		orient[nnodes - 1][i] = ntParent;
	};

    CGraph* pGraph = CGraph::Create( nnodes, numOfNeigh, neigh, orient);

    //Create static BNet
    CBNet* pBNet = CBNet::Create( nnodes, numNt, nodeTypes, nodeAssociation, pGraph );
    pBNet->AllocFactors();


    int nnodesInDom = 1;
    int *domains;
	domains = new int[nnodes -1];
	for( i = 0; i < nnodes - 1; i++ )
	{
		domains[i] = i;
	};
    float table[] = { 0.3f, 0.7f};

    CTabularCPD **pCPDPar;
	pCPDPar = new CTabularCPD*[nnodes - 1];
	for( i = 0; i < nnodes - 1; i++ )
	{
		pCPDPar[i] = CTabularCPD::Create( &domains[i], nnodesInDom, pBNet->GetModelDomain(), table );
		pBNet->AttachFactor(pCPDPar[i]);
	};	
		

    int nnodesInChilddom = nnodes;
	int *domainChild; 
	domainChild = new int[ nnodes ];

		for( i = 0; i < nnodes; i++ )
		{
//.........这里部分代码省略.........
开发者ID:billryan,项目名称:OpenPNL,代码行数:101,代码来源:AGibbsInfEngine.cpp

示例3: GibbsForSimplestGaussianBNet

int GibbsForSimplestGaussianBNet( float eps)
{
    std::cout<<std::endl<<"Gibbs for simplest gaussian BNet (3 nodes) "<<std::endl;

    int nnodes = 3;
    int numnt = 2;
    CNodeType *nodeTypes = new CNodeType[numnt];
    nodeTypes[0] = CNodeType(0,1);
    nodeTypes[1] = CNodeType(0,2);
    intVector nodeAssociation = intVector(nnodes,1);
    nodeAssociation[0] = 0;
    int nbs0[] = { 1 };
    int nbs1[] = { 0, 2 };
    int nbs2[] = { 1 };
    ENeighborType ori0[] = { ntChild };
    ENeighborType ori1[] = { ntParent, ntChild  };
    ENeighborType ori2[] = { ntParent };
    int *nbrs[] = { nbs0, nbs1, nbs2 };
    ENeighborType *orient[] = { ori0, ori1, ori2 };

    intVector numNeighb = intVector(3);
    numNeighb[0] = 1;
    numNeighb[1] = 2;
    numNeighb[2] = 1;

    CGraph *graph;
    graph = CGraph::Create(nnodes, &numNeighb.front(), nbrs, orient);

    CBNet *pBnet = CBNet::Create( nnodes, numnt, nodeTypes,
	&nodeAssociation.front(),graph );
    pBnet->AllocFactors();

    for(int i = 0; i < nnodes; i++ )
    {
	pBnet->AllocFactor(i);

    }

    floatVector data(1,0.0f);
    intVector ranges(2,1);

    ///////////////////////////////////////////////////////////////////
    CNumericDenseMatrix<float> *mean0 =
	CNumericDenseMatrix<float>::Create( 2, &ranges.front(), &data.front());

    data[0] = 0.3f;
    CNumericDenseMatrix<float> *cov0 =
	CNumericDenseMatrix<float>::Create( 2, &ranges.front(), &data.front());

    pBnet->GetFactor(0)->AttachMatrix( mean0, matMean );
    pBnet->GetFactor(0)->AttachMatrix( cov0, matCovariance );
    /////////////////////////////////////////////////////////////////////

    ranges[0] = 2;
    data.resize(2);
    data[0] = -1.0f;
    data[1] = 0.0f;
    CNumericDenseMatrix<float> *mean1 =
	CNumericDenseMatrix<float>::Create( 2, &ranges.front(), &data.front());

    ranges[1] = 2;
    data.resize(4);
    data[0] = 1.0f;
    data[1] = 0.1f;
    data[3] = 3.0f;
    data[2] = 0.1f;
    CNumericDenseMatrix<float> *cov1 =
	CNumericDenseMatrix<float>::Create( 2, &ranges.front(), &data.front());

    ranges[1] =1;
    data.resize(2);
    data[0] = 1.0f;
    data[1] = 0.5f;
    CNumericDenseMatrix<float> *weight1 =
	CNumericDenseMatrix<float>::Create( 2, &ranges.front(), &data.front());


    pBnet->GetFactor(1)->AttachMatrix( mean1, matMean );
    pBnet->GetFactor(1)->AttachMatrix( cov1, matCovariance );
    pBnet->GetFactor(1)->AttachMatrix( weight1, matWeights,0 );
    ///////////////////////////////////////////////////////////////////////////


    ranges[0] = 2;
    data.resize(2);
    data[0] = 1.0f;
    data[1] = 20.5f;
    CNumericDenseMatrix<float> *mean2 =
	CNumericDenseMatrix<float>::Create( 2, &ranges.front(), &data.front());

    ranges[1] = 2;
    data.resize(4);
    data[0] = 1.0f;
    data[1] = 0.0f;
    data[3] = 9.0f;
    data[2] = 0.0f;
    CNumericDenseMatrix<float> *cov2 =
	CNumericDenseMatrix<float>::Create( 2, &ranges.front(), &data.front());


//.........这里部分代码省略.........
开发者ID:billryan,项目名称:OpenPNL,代码行数:101,代码来源:AGibbsInfEngine.cpp

示例4: Learn

void CBICLearningEngine::Learn()
{
    CEMLearningEngine *pLearn = NULL;

    float resultBIC = -FLT_MAX;
    CBNet *pResultBNet = NULL;
    intVector resultOrder;
    
    
    pEvidencesVector pEv(m_Vector_pEvidences.size(), NULL );
    
    CModelDomain *pMD = m_pGrModel->GetModelDomain();
    
    int nnodes = m_pGrModel->GetNumberOfNodes();
    
    nodeTypeVector varTypes;
    pMD->GetVariableTypes(&varTypes);

    intVector varAss( pMD->GetVariableAssociations(), pMD->GetVariableAssociations() + nnodes );
       
    intVector currentAssociation(nnodes);
    intVector currentObsNodes(nnodes);
    int i;
    for( i = 0; i < nnodes; i++ )
    {
	currentObsNodes[i] = i;
    }

    CGraph *pGraph = CGraph::Create(nnodes, NULL, NULL, NULL);
    CBNet *pBNet;
    int lineSz = int( nnodes * ( nnodes - 1 ) / 2 );
    intVecVector connect;
    intVector indexes(lineSz, 0);
    int startNode, endNode;
    int ind;
    for( ind = 0; ind < lineSz ; )
    {
	if( indexes[ind] == 1 )
	{
	    FindNodesByNumber(&startNode, &endNode, nnodes, ind);
	    pGraph->RemoveEdge(startNode, endNode );
	    indexes[ind] = 0;
	    ind++;
	}
	else
	{
	    FindNodesByNumber(&startNode, &endNode, nnodes, ind);
	    pGraph->AddEdge(startNode, endNode, 1 );
	    indexes[ind] = 1;
	    ind = 0;
	    connect.clear();
	    pGraph->GetConnectivityComponents(&connect);
	    if( connect.size() == 1 )
	    {
		
		do
		{
		    CGraph *pCopyGraph = CGraph::Copy(pGraph);
		    int j;
		    for( j = 0; j < nnodes; j++ )
		    {
			currentAssociation[j] = varAss[currentObsNodes[j]];
		    }
		    
		    pBNet = CBNet::Create(nnodes, varTypes, currentAssociation, pCopyGraph);
		    pBNet->AllocFactors();
		    for( j = 0; j < nnodes; j++ )
		    {
			pBNet->AllocFactor( j );
			pBNet->GetFactor(j)->CreateAllNecessaryMatrices();
		    }

		    int dimOfModel = DimOfModel(pBNet);
		    int k;
		    for( k = 0; k < pEv.size(); k++ )
		    {
			valueVector vls; 
			m_Vector_pEvidences[k]->GetRawData(&vls);
			pEv[k] = CEvidence::Create( pBNet->GetModelDomain(),currentObsNodes, vls );
		    }
		    
		    
		    pLearn = CEMLearningEngine::Create(pBNet);
		    pLearn->SetData(pEv.size(), &pEv.front());
		    pLearn->Learn();
		    int nsteps;
		    const float *score;
		    pLearn->GetCriterionValue(&nsteps, &score);
		    float log_lik = score[nsteps-1];
		    float BIC = log_lik - 0.5f*float( dimOfModel*log(float(pEv.size())) );
		    
		    if( BIC >= resultBIC )
		    {
			delete pResultBNet;
			resultBIC = BIC;
			m_critValue.push_back(BIC);
			pResultBNet = pBNet;
			resultOrder.assign( currentObsNodes.begin(), currentObsNodes.end() );
		    }
		    else
//.........这里部分代码省略.........
开发者ID:JacobCWard,项目名称:PyPNL,代码行数:101,代码来源:pnlBicLearningEngine.cpp

示例5: CreateBNet

CBNet* CreateBNet()
{
	// Creation Water-Sprinkler Bayesian network

	const int numOfNds = 4;//*<-

	// 1 STEP:
	// need to specify the graph structure of the model;
	// there are two way to do it

	CGraph *pGraph;

		// Graph creation using neighbors list

		int numOfNbrs[numOfNds] = { 2, 2, 2, 2 };//*<-
		int nbrs0[] = { 1, 2 };//*<-
		int nbrs1[] = { 0, 3 };//*<-
		int nbrs2[] = { 0, 3 };//*<-
		int nbrs3[] = { 1, 2 };//*<-

		// number of neighbors for every node
		int *nbrs[] = { nbrs0, nbrs1, nbrs2, nbrs3 };//*<-

		// neighbors can be of either one of the three following types:
		// a parent, a child (for directed arcs) or just a neighbor (for undirected graphs).
		// Accordingly, the types are ntParent, ntChild or ntNeighbor.

		ENeighborType nbrsTypes0[] = { ntChild, ntChild };//*<-
		ENeighborType nbrsTypes1[] = { ntParent, ntChild };//*<-
		ENeighborType nbrsTypes2[] = { ntParent, ntChild };//*<-
		ENeighborType nbrsTypes3[] = { ntParent, ntParent };//*<-

		ENeighborType *nbrsTypes[] = { nbrsTypes0, nbrsTypes1,nbrsTypes2, nbrsTypes3 };//*<-

		// this is creation of a directed graph for the BNet model using neighbors list
		pGraph = CGraph::Create( numOfNds, numOfNbrs, nbrs, nbrsTypes );

	// 2 STEP:
	// Creation NodeType objects and specify node types for all nodes of the model.

	nodeTypeVector  nodeTypes;

	// number of node types is 1, because all nodes are of the same type
	// all four are discrete and binary
	CNodeType nt(1,2);//*<-
	nodeTypes.push_back(nt);

	intVector nodeAssociation;
	// reflects association between node numbers and node types
	// nodeAssociation[k] is a number of node type object in the
	// node types array for the k-th node
	nodeAssociation.assign(numOfNds, 0);

	// 2 STEP:
	// Creation base for BNet using Graph, types of nodes and nodes association

	CBNet* pBNet = CBNet::Create( numOfNds, nodeTypes, nodeAssociation, pGraph );

	// 3 STEP:
	// Allocation space for all factors of the model
	pBNet->AllocFactors();

	// 4 STEP:
	// Creation factors and attach their to model

	//create raw data tables for CPDs
	float table0[] = { 0.5f, 0.5f };//*<-
	float table1[] = { 0.5f, 0.5f, 0.9f, 0.1f };
	float table2[] = { 0.8f, 0.2f, 0.2f, 0.8f };
	float table3[] = { 1.0f, 0.0f, 0.1f, 0.9f, 0.1f, 0.9f, 0.01f, 0.99f };

	float* table[] = { table0, table1, table2, table3 };//*<-

	int i;
	for( i = 0; i < numOfNds; ++i )
	{
		pBNet->AllocFactor(i);

		CFactor* pFactor = pBNet->GetFactor(i);

		pFactor->AllocMatrix( table[i], matTable );
	}

	return pBNet;
}
开发者ID:caseypp,项目名称:Bayesian_Attack_Graph,代码行数:85,代码来源:inf_learn_bnet.cpp

示例6: CreateRandomBayessian

CBNet* CreateRandomBayessian(CGraph* pGraph, int max_num_states)
{
    PNL_CHECK_LEFT_BORDER( max_num_states, 1 );
    PNL_CHECK_IF_MEMORY_ALLOCATED( pGraph );

    if( !pGraph->IsDAG() )
    {
        PNL_THROW( CInconsistentType, " the graph should be a DAG " );
    }
    if( !pGraph->IsTopologicallySorted() )
    {
        PNL_THROW( CInconsistentType, 
            " the graph should be sorted topologically " );
    }
    if (pGraph->NumberOfConnectivityComponents() > 1)
    {
        PNL_THROW( CInconsistentType, " the graph should be linked " );
    }

    int i, j, k;

    int num_nodes = pGraph->GetNumberOfNodes();
    CNodeType *nodeTypes = new CNodeType [num_nodes];
    int num_states;
    
    for ( i = 0; i < num_nodes; i++ )
    {
        num_states = GetRandomNumberOfStates(max_num_states);
        nodeTypes[i].SetType(1, num_states, nsChance);
    }

    int *nodeAssociation = new int[num_nodes];
    for ( i = 0; i < num_nodes; i++ )
    {
        nodeAssociation[i] = i;
    }

    CBNet *pBNet = CBNet::Create( num_nodes, num_nodes, nodeTypes,
                                     nodeAssociation, pGraph );
    
    CModelDomain* pMD = pBNet->GetModelDomain();
    
    CFactor **myParams = new CFactor*[num_nodes];
    int *nodeNumbers = new int[num_nodes];
    int **domains = new int*[num_nodes];

    intVector parents(0);
    for ( i = 0; i < num_nodes; i++)
    {
        nodeNumbers[i] = pGraph->GetNumberOfParents(i) + 1;
        domains[i] = new int[nodeNumbers[i]];
        pGraph->GetParents(i, &parents);
        
        for ( j = 0; j < parents.size(); j++ )
            domains[i][j] = parents[j];
        domains[i][nodeNumbers[i]-1] = i;
    }

    pBNet->AllocFactors();

    for( i = 0; i < num_nodes; i++ )
    {
        myParams[i] = CTabularCPD::Create( domains[i], 
            nodeNumbers[i], pMD);
    }

    float **data = new float*[num_nodes];
    int size_data;
    int num_states_node;
    int num_blocks;
    intVector size_nodes(0);
    float belief, sum_beliefs;

    for ( i = 0; i < num_nodes; i++ )
    {
        size_data = 1;
        size_nodes.resize(0);
        for ( j = 0; j < nodeNumbers[i]; j++ )
        {
            size_nodes.push_back(pBNet->GetNodeType(
                domains[i][j])->GetNodeSize());
            size_data *= size_nodes[j];
        }
        num_states_node = size_nodes[size_nodes.size() - 1];
        num_blocks = size_data / num_states_node;
        
        data[i] = new float[size_data];

        for ( j = 0; j < num_blocks; j++ )
        {
            sum_beliefs = 0.0;
            for ( k = 0; k < num_states_node - 1; k++ )
            {
                belief = GetBelief(1.0 - sum_beliefs);
                data[i][j * num_states_node + k] = belief;
                sum_beliefs += belief;
            }
            belief = 1.0 - sum_beliefs;
            data[i][j * num_states_node + num_states_node - 1] = belief;
        }
//.........这里部分代码省略.........
开发者ID:JacobCWard,项目名称:PyPNL,代码行数:101,代码来源:CreateBNets.cpp

示例7: testBayesLearningEngine

int testBayesLearningEngine()
{
    
    int ret = TRS_OK;
    int i, j;
    const int nnodes = 4;//Number of nodes
    int numNt = 1;//number of Node Types

    float eps = -1.0f;
    while( eps <= 0)
    {
	trssRead( &eps, "0.01f", "accuracy in test");
    }
    CNodeType *nodeTypes = new CNodeType [numNt];
    for( i=0; i < numNt; i++ )
    {
	nodeTypes[i] = CNodeType(1,2);//all nodes are discrete and binary
    }

    int nodeAssociation[] = {0, 0, 0, 0};
    int obs_nodes[] = { 0, 1, 2, 3 };
    int numOfNeigh[] = { 2, 2, 2, 2};

    int neigh0[] = { 1, 2 };
    int neigh1[] = { 0, 3 };
    int neigh2[] = { 0, 3 };
    int neigh3[] = { 1, 2 };

    ENeighborType orient0[] = { ntChild, ntChild };
    ENeighborType orient1[] = { ntParent, ntChild };
    ENeighborType orient2[] = { ntParent, ntChild };
    ENeighborType orient3[] = { ntParent, ntParent };

    int *neigh[] = { neigh0, neigh1, neigh2, neigh3 };
    ENeighborType *orient[] = { orient0, orient1, orient2, orient3 };

    float prior0[] = { 1.f, 1.f };
    float prior1[] = { 1.f, 1.f, 1.f, 1.f };
    float prior2[] = { 1.f, 1.f, 1.f, 1.f };
    float prior3[] = { 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f };

    float* priors[] = { prior0,prior1,prior2,prior3 };

    float zero_array[] = { 1,1,1,1, 1,1,1,1 };

    float test_data0[] = { 0.636364f, 0.363636f };
    float test_data1[] = { 0.6f, 0.4f, 0.777778f, 0.222222f };
    float test_data2[] = { 0.866667f, 0.133333f, 0.111111f, 0.888889f };
    float test_data3[] = { 0.888889f, 0.111111f, 0.111111f, 0.888889f,
	0.142857f, 0.857143f, 0.333333f, 0.666667f };
    float* test_data_first[] = { test_data0, test_data1, test_data2, test_data3 };

    float test_data4[] = { 0.519231f, 0.480769f };
    float test_data5[] = { 0.571429f, 0.428571f, 0.884615f, 0.115385f };
    float test_data6[] = { 0.857143f, 0.142857f, 0.0769231f, 0.923077f };
    float test_data7[] = { 0.937500f, 0.0625000f, 0.12f, 0.88f,
	0.166667f, 0.833333f, 0.2f, 0.8f };
    float* test_data_second[] = { test_data4, test_data5, test_data6, test_data7 };

    CGraph* Graph = CGraph::Create( nnodes, numOfNeigh, neigh,
	orient);

    CBNet *myBNet = CBNet::Create(nnodes, numNt, nodeTypes,
	nodeAssociation, Graph );

    myBNet->AllocFactors();
    for ( int node = 0; node < nnodes; node++ )
    {
	myBNet->AllocFactor( node );
	//allocate empty CPT matrix, it needs to be allocated even if
	//we are going to learn train it.
	(myBNet->GetFactor( node ))->AllocMatrix( zero_array, matTable );
	//allocate prior matrices
	(myBNet->GetFactor( node ))->AllocMatrix( priors[node], matDirichlet );
	static_cast<CCPD *>(myBNet->GetFactor( node ))->NormalizeCPD();
    }

    ///////////////////////////////////////////////////////////////
    //Reading cases from disk

    FILE *fp;
    const int nEv = 50;
    CEvidence **m_pEv;
    m_pEv = new CEvidence *[nEv];
    std::vector<valueVector> Evidence(nEv);
    for( int ev = 0; ev < nEv; ev++)
    {
	Evidence[ev].resize(nnodes);
    }

    int simbol;
    char *argv = "../c_pgmtk/tests/testdata/cases1";
    fp = fopen(argv, "r");
    if(!fp)
    {
        argv = "../testdata/cases1";
        if ((fp = fopen(argv, "r")) == NULL)
	{
            printf( "can't open file %s\n", argv );
	    ret = TRS_FAIL;
//.........这里部分代码省略.........
开发者ID:JacobCWard,项目名称:PyPNL,代码行数:101,代码来源:ABayesParameterLearning.cpp

示例8: LearnOneStep


//.........这里部分代码省略.........
		PNL_THROW(CInternalError, "There are some internal errors");
	}

	intVector vRenaming, Old2New;
	CDAG* iDAG;
	int TopologicSorted = pDAG->IsTopologicallySorted();
	if( TopologicSorted )
	{
		iDAG = pDAG->Clone();
		for(i=0; i<m_nNodes; i++) vRenaming.push_back(i);
	}
	else
		iDAG = pDAG->TopologicalCreateDAG(vRenaming);
	pDAG->Dump();
	intVector gRename;
	for(i=0; i<m_nNodes; i++)
	{
		node = vRenaming[i];
		node1 = m_vGlobalRenaming[node];
		gRename.push_back(node1);
	}
	m_vGlobalRenaming.assign(gRename.begin(), gRename.end());

	int pos;
	for(i=0; i<m_nNodes; i++)
	{
		pos = std::find(vRenaming.begin(), vRenaming.end(), i) - vRenaming.begin();
		Old2New.push_back(pos);
	}

	const int* oldNodeAsso = m_pCurrBNet->GetNodeAssociations();
	intVector newNodeAsso(m_nNodes,0);
	for(i=0; i<m_nNodes; i++)
	{
		newNodeAsso[i] = oldNodeAsso[vRenaming[i]];
	}
	nodeTypeVector vpnt;
	m_pCurrBNet->GetNodeTypes(&vpnt);
	CBNet* pBNet = CBNet::Create(m_nNodes, vpnt.size(), &vpnt.front(), 
		           &newNodeAsso.front(), static_cast<CGraph*>(iDAG));
	CModelDomain* pMDnew = pBNet->GetModelDomain();
	pBNet->AllocFactors();
	intVector domainNew, domainOld;
	const CFactor* factor=0;
	CFactor* curFactor;
	for(i=0; i<m_nNodes; i++)
	{
		domainNew.clear();
		newnode = Old2New[i];
		if( (i != start) && (i != end) )
		{
			factor = m_pCurrBNet->GetFactor(i);
		}
		else
		{
			if(changeType == DAG_REV)
			{
				if(i == start)
					factor = addCPD->Clone();
				if(i == end)
					factor = delCPD->Clone();
			}
			if(changeType == DAG_DEL)
			{
				if(i == start)
					factor = m_pCurrBNet->GetFactor(i);
				if(i == end)
					factor = delCPD->Clone();
			}
			if(changeType == DAG_ADD)
			{
				if(i == start)
					factor = m_pCurrBNet->GetFactor(i);
				if(i == end)
					factor = addCPD->Clone();
			}
		}
		factor->GetDomain(&domainOld);
		for(j=0; j<domainOld.size(); j++)
		{
			domainNew.push_back(Old2New[domainOld[j]]);
		}
		curFactor = CFactor::CopyWithNewDomain(factor, domainNew, pMDnew);
		pBNet->AttachFactor(curFactor);
	}

	if(changeType == DAG_REV)
	{
		delete addCPD;
		delete delCPD;
	}
	if(changeType == DAG_ADD)delete addCPD;
	if(changeType == DAG_DEL)delete delCPD;

	delete m_pCurrBNet;
	delete pDAG;
	m_pCurrBNet = pBNet;
	m_critValue.push_back(total_score);
	return true;
}
开发者ID:lspatial,项目名称:spstatics_parallel,代码行数:101,代码来源:pnlStaticStructLearnSEM.cpp

示例9: main

int main()
{
    PNL_USING
	//we create very small model to start inference on it
	// the model is from Kevin Murphy's BNT\examples\static\belprop_polytree_gaussain
	/*
	Do the example from Satnam Alag's PhD thesis, UCB ME dept 1996 p46
	Make the following polytree, where all arcs point down
	
	 0   1
	  \ /
	   2
	  / \
	 3   4


	*/
	int i;
	//create this model
	int nnodes = 5;
	int numnt = 2;
	CNodeType *nodeTypes = new CNodeType[numnt];
 	nodeTypes[0] = CNodeType(0,2);
	nodeTypes[1] = CNodeType(0,1);
	
	intVector nodeAssociation = intVector(nnodes,0);
	nodeAssociation[1] = 1;
	nodeAssociation[3] = 1;
	int nbs0[] = { 2 };
	int nbs1[] = { 2 };
	int nbs2[] = { 0, 1, 3, 4 };
	int nbs3[] = { 2 };
	int nbs4[] = { 2 };
	int *nbrs[] = { nbs0, nbs1, nbs2, nbs3, nbs4 };
	int numNeighb[] = {1, 1, 4, 1, 1};

	
	ENeighborType ori0[] = { ntChild };
	ENeighborType ori1[] = { ntChild };
	ENeighborType ori2[] = { ntParent, ntParent, ntChild, ntChild };
	ENeighborType ori3[] = { ntParent };
	ENeighborType ori4[] = { ntParent };
	ENeighborType *orient[] = { ori0, ori1, ori2, ori3, ori4 }; 
	
	
	CGraph *pGraph;
	pGraph = CGraph::Create(nnodes, numNeighb, nbrs, orient);
	
	CBNet *pBNet;
	
	pBNet = CBNet::Create( nnodes, numnt, nodeTypes, &nodeAssociation.front(), pGraph );
	//Allocation space for all factors of the model
	pBNet->AllocFactors();
	
	for( i = 0; i < nnodes; i++ )
	{
	    //Allocation space for all matrices of CPD
	    pBNet->AllocFactor(i);
	}
	
	//now we need to create data for CPDs - we'll create matrices
	CFactor *pCPD;
	floatVector smData = floatVector(2,0.0f);
	floatVector bigData = floatVector(4,1.0f);
	intVector ranges = intVector(2, 1);
	ranges[0] = 2;
	smData[0] = 1.0f;
	CNumericDenseMatrix<float> *mean0 = CNumericDenseMatrix<float>::
        Create( 2, &ranges.front(), &smData.front());
	bigData[0] = 4.0f;
	bigData[3] = 4.0f;
	ranges[1] = 2;
	CNumericDenseMatrix<float> *cov0 = CNumericDenseMatrix<float>::
        Create( 2, &ranges.front(), &bigData.front());
	pCPD = pBNet->GetFactor(0);
	pCPD->AttachMatrix(mean0, matMean);
	pCPD->AttachMatrix(cov0, matCovariance);
	ranges[0] = 1;
	ranges[1] = 1;
	float val = 1.0f;
	CNumericDenseMatrix<float> *mean1 = CNumericDenseMatrix<float>::
        Create( 2, &ranges.front(), &val );
	CNumericDenseMatrix<float> *cov1 = CNumericDenseMatrix<float>::
        Create( 2, &ranges.front(), &val );
	pCPD = pBNet->GetFactor(1);
	pCPD->AttachMatrix(mean1, matMean);
	pCPD->AttachMatrix(cov1, matCovariance);
	smData[0] = 0.0f;
	smData[1] = 0.0f;
	ranges[0] = 2;
	CNumericDenseMatrix<float> *mean2 = CNumericDenseMatrix<float>::
        Create(2, &ranges.front(), &smData.front());
	smData[0] = 2.0f;
	smData[1] = 1.0f;
	CNumericDenseMatrix<float> *w21 = CNumericDenseMatrix<float>::
        Create(2, &ranges.front(), &smData.front());
	bigData[0] = 2.0f;
	bigData[1] = 1.0f;
	bigData[2] = 1.0f;
	bigData[3] = 1.0f;
//.........这里部分代码省略.........
开发者ID:JacobCWard,项目名称:PyPNL,代码行数:101,代码来源:learn_param.cpp

示例10: CreateTwoNodeEx

CBNet* CreateTwoNodeEx(void)
{
    const int numOfNds = 2;
    int numOfNbrs[numOfNds] = { 1, 1 };

    int nbrs0[] = { 1 };
    int nbrs1[] = { 0 };

    ENeighborType nbrsTypes0[] = { ntChild };
    ENeighborType nbrsTypes1[] = { ntParent };

    int *nbrs[] = { nbrs0, nbrs1 };
    ENeighborType *nbrsTypes[] = { nbrsTypes0, nbrsTypes1 };

    CGraph* pGraph = CGraph::Create(numOfNds, numOfNbrs, nbrs, nbrsTypes);

    CModelDomain* pMD;

    nodeTypeVector variableTypes;

    int nVariableTypes = 2;
    variableTypes.resize(nVariableTypes);

    variableTypes[0].SetType(0, 1);
    variableTypes[1].SetType(1, 2);

    intVector variableAssociation;
    int nnodes = pGraph->GetNumberOfNodes();
    variableAssociation.assign(nnodes, 1);
    variableAssociation[0] = 0;
    variableAssociation[1] = 1;

    pMD = CModelDomain::Create(variableTypes, variableAssociation);

    CBNet *pBNet = CBNet::Create(pGraph, pMD);

    pBNet->AllocFactors();

    int nnodes0 = 1;
    int domain0[] = { 0 };
    float mean0 = 0.0f;
    float cov0 = 1.0f;
    CGaussianCPD *pCPD0 = CGaussianCPD::Create(domain0, nnodes0, pMD);
    pCPD0->AllocDistribution(&mean0, &cov0, 1.0f, NULL);
    pBNet->AttachFactor(pCPD0);

    int nnodes1 = 2;
    int domain1[] = { 0, 1 };

    CSoftMaxCPD *pCPD3 = CSoftMaxCPD::Create(domain1, nnodes1, pMD);

    int parInd0[] = { 0 };

//  float weight30[] = { -1.0f,-1.0f };
//  float offset30[] = { 1.0f, 1.0f };

    float weight30[] = { -0.3059f, -1.1777f };
    float offset30[] = { 0.0886f, 0.2034f };

    pCPD3->AllocDistribution(weight30, offset30, parInd0);

    pBNet->AttachFactor(pCPD3);

    return pBNet;
}
开发者ID:JacobCWard,项目名称:PyPNL,代码行数:65,代码来源:SamplesOfSMNet.cpp

示例11: CreateSevenNodeExDiscrete

// ----------------------------------------------------------------------------
CBNet* CreateSevenNodeExDiscrete(void)
{

    // 0  1   2
    // |\ \  /
    // | \ \ /
    // |    3
    // |   / \ 
    // |  4   5
    // |/
    // 6
    // 0, 1, 5 -  continuous
    // 3, 6 - softmax
    // 2, 4 - discrete

    const int numOfNds = 7;
    int numOfNbrs[numOfNds] = { 2, 1, 1, 5, 2, 1, 2 };

    int nbrs0[] = { 3, 6 };
    int nbrs1[] = { 3 };
    int nbrs2[] = { 3 };
    int nbrs3[] = { 0, 1, 2, 4, 5 };
    int nbrs4[] = { 3, 6 };
    int nbrs5[] = { 3 };
    int nbrs6[] = { 0, 4 };

    ENeighborType nbrsTypes0[] = { ntChild, ntChild };
    ENeighborType nbrsTypes1[] = { ntChild };
    ENeighborType nbrsTypes2[] = { ntChild };
    ENeighborType nbrsTypes3[] = { ntParent, ntParent, ntParent, ntChild, ntChild };
    ENeighborType nbrsTypes4[] = { ntParent, ntChild };
    ENeighborType nbrsTypes5[] = { ntParent };
    ENeighborType nbrsTypes6[] = { ntParent, ntParent };

    int *nbrs[] = { nbrs0, nbrs1, nbrs2, nbrs3, nbrs4, nbrs5, nbrs6 };
    ENeighborType *nbrsTypes[] = { nbrsTypes0, nbrsTypes1, nbrsTypes2, nbrsTypes3, nbrsTypes4,
                                   nbrsTypes5, nbrsTypes6
                                 };

    CGraph* pGraph = CGraph::Create( numOfNds, numOfNbrs, nbrs, nbrsTypes );

    // 2) Creation of the Model Domain.
    CModelDomain* pMD;

    nodeTypeVector variableTypes;

    int nVariableTypes = 2;
    variableTypes.resize( nVariableTypes );

    variableTypes[0].SetType( 0, 1 ); // continuous
    variableTypes[1].SetType( 1, 2 ); // discrete, 2 states

    intVector variableAssociation;
    int nnodes = pGraph->GetNumberOfNodes();
    variableAssociation.assign(nnodes, 1);
    variableAssociation[0] = 1;
    variableAssociation[1] = 1;
    variableAssociation[2] = 1;
    variableAssociation[3] = 1;
    variableAssociation[4] = 1;
    variableAssociation[5] = 1;
    variableAssociation[6] = 1;

    pMD = CModelDomain::Create( variableTypes, variableAssociation );

    // 2) Creation base for BNet using Graph, and Model Domain

    CBNet *pBNet = CBNet::Create(pGraph, pMD);

    // 3)Allocation space for all factors of the model
    pBNet->AllocFactors();

    int nnodes0 = 1;
    int domain0[] = { 0 };
    float table0[] = { 0.3f, 0.7f};
    CTabularCPD *pCPD0 = CTabularCPD::Create( domain0, nnodes0, pMD, table0 );
    pCPD0->AllocMatrix(table0, matTable);
    pBNet->AttachParameter(pCPD0);

    int nnodes1 = 1;
    int domain1[] = { 1 };
    float table1[] = { 0.3f, 0.7f};
    CTabularCPD *pCPD1 = CTabularCPD::Create( domain1, nnodes1, pMD, table1 );
    pCPD1->AllocMatrix(table1, matTable);
    pBNet->AttachParameter(pCPD1);

    int nnodes2 = 1;
    int domain2[] = { 2 };
    float table2[] = { 0.3f, 0.7f};
    CTabularCPD *pCPD2 = CTabularCPD::Create( domain2, nnodes2, pMD, table2 );
    pCPD2->AllocMatrix(table2, matTable);
    pBNet->AttachParameter(pCPD2);

    int nnodes3 = 4;
    int domain3[] = { 0, 1, 2, 3 };
    float table3[] = { 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f};
    CTabularCPD *pCPD3 = CTabularCPD::Create( domain3, nnodes3, pMD, table3 );
    pCPD3->AllocMatrix(table3, matTable);
    pBNet->AttachParameter(pCPD3);
//.........这里部分代码省略.........
开发者ID:JacobCWard,项目名称:PyPNL,代码行数:101,代码来源:SamplesOfSMNet.cpp

示例12: CreateSevenNodeEx

// ----------------------------------------------------------------------------
CBNet* CreateSevenNodeEx(void)
{

    // 0  1   2
    // |\ \  /
    // | \ \ /
    // |    3
    // |   / \ 
    // |  4   5
    // |/
    // 6
    // 0, 1, 5 - continuous
    // 3, 6 - softmax
    // 2, 4 - discrete

    const int numOfNds = 7;
    int numOfNbrs[numOfNds] = { 2, 1, 1, 5, 2, 1, 2 };

    int nbrs0[] = { 3, 6 };
    int nbrs1[] = { 3 };
    int nbrs2[] = { 3 };
    int nbrs3[] = { 0, 1, 2, 4, 5 };
    int nbrs4[] = { 3, 6 };
    int nbrs5[] = { 3 };
    int nbrs6[] = { 0, 4 };

    ENeighborType nbrsTypes0[] = { ntChild, ntChild };
    ENeighborType nbrsTypes1[] = { ntChild };
    ENeighborType nbrsTypes2[] = { ntChild };
    ENeighborType nbrsTypes3[] = { ntParent, ntParent, ntParent, ntChild, ntChild };
    ENeighborType nbrsTypes4[] = { ntParent, ntChild };
    ENeighborType nbrsTypes5[] = { ntParent };
    ENeighborType nbrsTypes6[] = { ntParent, ntParent };

    int *nbrs[] = { nbrs0, nbrs1, nbrs2, nbrs3, nbrs4, nbrs5, nbrs6 };
    ENeighborType *nbrsTypes[] = { nbrsTypes0, nbrsTypes1, nbrsTypes2, nbrsTypes3, nbrsTypes4,
                                   nbrsTypes5, nbrsTypes6
                                 };

    CGraph* pGraph = CGraph::Create( numOfNds, numOfNbrs, nbrs, nbrsTypes );

    // 2) Creation of the Model Domain.
    CModelDomain* pMD;

    nodeTypeVector variableTypes;

    int nVariableTypes = 2;
    variableTypes.resize( nVariableTypes );

    variableTypes[0].SetType( 0, 1 ); // continuous
    variableTypes[1].SetType( 1, 2 ); // discrete, 2 states

    intVector variableAssociation;
    int nnodes = pGraph->GetNumberOfNodes();
    variableAssociation.assign(nnodes, 1);
    variableAssociation[0] = 0;
    variableAssociation[1] = 0;
    variableAssociation[2] = 1;
    variableAssociation[3] = 1;
    variableAssociation[4] = 1;
    variableAssociation[5] = 0;
    variableAssociation[6] = 1;

    pMD = CModelDomain::Create( variableTypes, variableAssociation );

    // 2) Creation base for BNet using Graph, and Model Domain

    CBNet *pBNet = CBNet::Create(pGraph, pMD);

    // 3)Allocation space for all factors of the model
    pBNet->AllocFactors();

    int nnodes0 = 1;
    int domain0[] = { 0 };
    float mean0 = 0.5f;
    float cov0 = 1.0f;
    CGaussianCPD *pCPD0 = CGaussianCPD::Create( domain0, nnodes0, pMD );
    pCPD0->AllocDistribution( &mean0, &cov0, 1.0f, NULL );
    pBNet->AttachFactor( pCPD0 );

    int nnodes1 = 1;
    int domain1[] = { 1 };
    float mean1 = 0.5f;
    float cov1 = 1.0f;
    CGaussianCPD *pCPD1 = CGaussianCPD::Create( domain1, nnodes1, pMD );
    pCPD1->AllocDistribution( &mean1, &cov1, 1.0f, NULL );
    pBNet->AttachFactor( pCPD1 );

    int nnodes2 = 1;
    int domain2[] = { 2 };
    float table2[] = { 0.3f, 0.7f};
    CTabularCPD *pCPD2 = CTabularCPD::Create( domain2, nnodes2, pMD, table2 );
    pCPD2->AllocMatrix(table2, matTable);
    pBNet->AttachParameter(pCPD2);

    int nnodes3 = 4;
    int domain3[] = { 0, 1, 2, 3 };
    CSoftMaxCPD *pCPD3 = CSoftMaxCPD::Create( domain3, nnodes3, pMD );

//.........这里部分代码省略.........
开发者ID:JacobCWard,项目名称:PyPNL,代码行数:101,代码来源:SamplesOfSMNet.cpp

示例13: CreateSixNodeEx

CBNet* CreateSixNodeEx(void)
{
    int i;
    const int numOfNds = 6;
    int numOfNbrs[numOfNds] = { 1, 1, 1, 1, 1, 5 };

    int nbrs0[] = { 5 };
    int nbrs1[] = { 5 };
    int nbrs2[] = { 5 };
    int nbrs3[] = { 5 };
    int nbrs4[] = { 5 };
    int nbrs5[] = { 0, 1, 2, 3, 4 };

    ENeighborType nbrsTypes0[] = { ntChild };
    ENeighborType nbrsTypes1[] = { ntChild };
    ENeighborType nbrsTypes2[] = { ntChild };
    ENeighborType nbrsTypes3[] = { ntChild };
    ENeighborType nbrsTypes4[] = { ntChild };
    ENeighborType nbrsTypes5[] = { ntParent, ntParent, ntParent, ntParent,
                                   ntParent
                                 };

    int *nbrs[] = { nbrs0, nbrs1, nbrs2, nbrs3, nbrs4, nbrs5};
    ENeighborType *nbrsTypes[] = { nbrsTypes0, nbrsTypes1, nbrsTypes2,
                                   nbrsTypes3, nbrsTypes4, nbrsTypes5
                                 };

    CGraph* pGraph = CGraph::Create(numOfNds, numOfNbrs, nbrs, nbrsTypes);

    CModelDomain* pMD;

    nodeTypeVector variableTypes;

    int nVariableTypes = 2;
    variableTypes.resize(nVariableTypes);

    variableTypes[0].SetType(0, 1);
//  variableTypes[0].SetType(1, 4);
    variableTypes[1].SetType(1, 2);

    intVector variableAssociation;
    int nnodes = pGraph->GetNumberOfNodes();
    variableAssociation.assign(nnodes, 1);
    variableAssociation[0] = 0;
    variableAssociation[1] = 0;
    variableAssociation[2] = 0;
    variableAssociation[3] = 0;
    variableAssociation[4] = 0;
    variableAssociation[5] = 1;

    pMD = CModelDomain::Create(variableTypes, variableAssociation);

    CBNet *pBNet = CBNet::Create(pGraph, pMD);

    pBNet->AllocFactors();

    int nnodes0 = 1;
    int domain0[] = { 0 };
    float mean0 = 0.0f;
    float cov0 = 1.0f;

    CGaussianCPD *pCPD0 = CGaussianCPD::Create(domain0, nnodes0, pMD);
    pCPD0->AllocDistribution(&mean0, &cov0, 1.0f, NULL);
    pBNet->AttachFactor(pCPD0);

    int nnodes1 = 1;
    int domain1[] = { 1 };
    float mean1 = 2.0f;
    float cov1 = 1.0f;

    CGaussianCPD *pCPD1 = CGaussianCPD::Create(domain1, nnodes1, pMD);
    pCPD1->AllocDistribution(&mean1, &cov1, 1.0f, NULL);
    pBNet->AttachFactor(pCPD1);

    int nnodes2 = 1;
    int domain2[] = { 2 };
    float mean2 = 1.0f;
    float cov2 = 1.0f;

    CGaussianCPD *pCPD2 = CGaussianCPD::Create(domain2, nnodes2, pMD);
    pCPD2->AllocDistribution(&mean2, &cov2, 1.0f, NULL);
    pBNet->AttachFactor(pCPD2);

    int nnodes3 = 1;
    int domain3[] = { 3 };
    float mean3 = 5.0f;
    float cov3 = 1.0f;

    CGaussianCPD *pCPD3 = CGaussianCPD::Create(domain3, nnodes3, pMD);
    pCPD3->AllocDistribution(&mean3, &cov3, 1.0f, NULL);
    pBNet->AttachFactor(pCPD3);

    int nnodes4 = 1;
    int domain4[] = { 4 };
    float mean4 = 5.0f;
    float cov4 = 1.0f;

    CGaussianCPD *pCPD4 = CGaussianCPD::Create(domain4, nnodes4, pMD);
    pCPD4->AllocDistribution(&mean4, &cov4, 1.0f, NULL);
    pBNet->AttachFactor(pCPD4);
//.........这里部分代码省略.........
开发者ID:JacobCWard,项目名称:PyPNL,代码行数:101,代码来源:SamplesOfSMNet.cpp

示例14: CreateAlarmBNet


//.........这里部分代码省略.........
    nodeNumbers[25] =  5;
    int domain26[] = { 25, 26 };
    nodeNumbers[26] =  2;
    int domain27[] = { 7, 26, 27 };
    nodeNumbers[27] =  3;
    int domain28[] = { 28 };
    nodeNumbers[28] =  1;
    int domain29[] = { 26, 28, 29 };
    nodeNumbers[29] =  3;
    int domain30[] = { 26, 28, 30 };
    nodeNumbers[30] =  3;
    int domain31[] = { 14, 16, 31 };
    nodeNumbers[31] =  3;
    int domain32[] = { 8, 14, 32 };
    nodeNumbers[32] =  3;
    int domain33[] = { 20, 33 };
    nodeNumbers[33] =  2;
    int domain34[] = { 8, 9, 13, 34 };
    nodeNumbers[34] =  4;
    int domain35[] = { 6, 26, 35 };
    nodeNumbers[35] =  3;
    int domain36[] = { 24, 35, 36 };
    nodeNumbers[36] =  3;
    
    int *domains[] = { domain0, domain1, domain2, domain3, domain4,
	domain5, domain6, domain7, domain8, domain9,
	domain10, domain11, domain12, domain13, domain14,
	domain15, domain16, domain17, domain18, domain19,
	domain20, domain21, domain22, domain23, domain24,
	domain25, domain26, domain27, domain28, domain29,
	domain30, domain31, domain32, domain33, domain34,
	domain35, domain36};
    
    pBNet->AllocFactors();
    
    for( i = 0; i < nnodes; i++ )
    {
	myParams[i] = CTabularCPD::Create( domains[i], nodeNumbers[i], pMD);
    }
    
    // data creation for all CPDs of the model
    float data0[] = {0.050000f, 0.950000f};
    float data1[] = {0.900000f, 0.100000f, 0.010000f, 0.990000f};
    float data2[] = {0.200000f, 0.800000f};
    float data3[] = {0.950000f, 0.040000f, 0.010000f, 0.980000f, 0.010000f, 0.010000f, 0.010000f, 0.090000f, 0.900000f, 0.050000f, 0.900000f, 0.050000f};
    float data4[] = {0.950000f, 0.040000f, 0.010000f, 0.040000f, 0.950000f, 0.010000f, 0.010000f, 0.290000f, 0.700000f};
    float data5[] = {0.950000f, 0.040000f, 0.010000f, 0.040000f, 0.950000f, 0.010000f, 0.010000f, 0.040000f, 0.950000f};
    float data6[] = {0.980000f, 0.010000f, 0.010000f, 0.950000f, 0.040000f, 0.010000f, 0.500000f, 0.490000f, 0.010000f, 0.050000f, 0.900000f, 0.050000f};
    float data7[] = {0.050000f, 0.950000f};
    float data8[] = {0.920000f, 0.030000f, 0.050000f};
    float data9[] = {0.040000f, 0.960000f};
    float data10[] = {0.100000f, 0.900000f};
    float data11[] = {0.050000f, 0.900000f, 0.050000f};
    float data12[] = {0.050000f, 0.930000f, 0.010000f, 0.010000f, 0.050000f, 0.010000f, 0.930000f, 0.010000f, 0.050000f, 0.010000f, 0.010000f, 0.930000f};
    float data13[] = {0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f};
    float data14[] = {0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.300000f, 0.680000f, 0.010000f, 0.010000f, 0.950000f, 0.030000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.950000f, 0.030000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.500000f, 0.480000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.400000f, 0.580000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.300000f, 0.680000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f};
    float data15[] = {0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.030000f, 0.950000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.940000f, 0.040000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.880000f, 0.100000f, 0.010000f};
    float data16[] = {0.010000f, 0.010000f, 0.980000f, 0.010000f, 0.010000f, 0.980000f, 0.040000f, 0.920000f, 0.040000f, 0.900000f, 0.090000f, 0.010000f};
    float data17[] = {0.100000f, 0.900000f};
    float data18[] = {0.050000f, 0.950000f};
    float data19[] = {1.000000f, 0.000000f, 0.000000f, 0.950000f, 0.040000f, 0.010000f, 1.000000f, 0.000000f, 0.000000f, 0.010000f, 0.950000f, 0.040000f, 0.990000f, 0.010000f, 0.000000f, 0.950000f, 0.040000f, 0.010000f, 0.950000f, 0.040000f, 0.010000f, 0.010000f, 0.010000f, 0.980000f};
    float data20[] = {0.010000f, 0.990000f};
    float data21[] = {0.100000f, 0.900000f, 0.950000f, 0.050000f, 0.100000f, 0.900000f, 0.950000f, 0.050000f, 0.010000f, 0.990000f, 0.050000f, 0.950000f};
    float data22[] = {0.980000f, 0.010000f, 0.010000f, 0.980000f, 0.010000f, 0.010000f, 0.010000f, 0.980000f, 0.010000f, 0.980000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.980000f, 0.690000f, 0.300000f, 0.010000f};
    float data23[] = {0.010000f, 0.990000f};
    float data24[] = {0.980000f, 0.010000f, 0.010000f, 0.300000f, 0.400000f, 0.300000f};
开发者ID:PyOpenPNL,项目名称:OpenPNL,代码行数:67,代码来源:testSL.cpp


注:本文中的CBNet::AllocFactors方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。