本文整理汇总了C++中CBNet::AttachFactor方法的典型用法代码示例。如果您正苦于以下问题:C++ CBNet::AttachFactor方法的具体用法?C++ CBNet::AttachFactor怎么用?C++ CBNet::AttachFactor使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CBNet
的用法示例。
在下文中一共展示了CBNet::AttachFactor方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CreateRandomBayessian
//.........这里部分代码省略.........
}
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;
}
}
for( i = 0; i < num_nodes; i++ )
{
myParams[i]->AllocMatrix(data[i], matTable);
pBNet->AttachFactor(myParams[i]);
}
delete [] nodeTypes;
delete [] nodeAssociation;
return pBNet;
}
示例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++ )
{
//.........这里部分代码省略.........
示例3: CreateFourNodeExampleNew
CBNet* CreateFourNodeExampleNew(void)
{
CBNet *pBNet;
const int nnodes = 4;
const int numberOfNodeTypes = 2;
int numOfNeigh[] = { 1, 1, 3, 1 };
int neigh0[] = { 2 };
int neigh1[] = { 2 };
int neigh2[] = { 0, 1, 3 };
int neigh3[] = { 2 };
ENeighborType orient0[] = { ntChild };
ENeighborType orient1[] = { ntChild };
ENeighborType orient2[] = { ntParent, ntParent, ntChild };
ENeighborType orient3[] = { ntParent };
int *neigh[] = { neigh0, neigh1, neigh2, neigh3 };
ENeighborType *orient[] = { orient0, orient1, orient2, orient3 };
CGraph *pGraph = CGraph::Create( nnodes, numOfNeigh, neigh, orient );
CNodeType *nodeTypes = new CNodeType [numberOfNodeTypes];
nodeTypes[0].SetType(1, 2);
nodeTypes[1].SetType(0, 1);
int *nodeAssociation = new int[nnodes];
nodeAssociation[0]=0;
nodeAssociation[1]=1;
nodeAssociation[2]=1;
nodeAssociation[3]=1;
pBNet = CBNet::Create(nnodes, numberOfNodeTypes, nodeTypes, nodeAssociation, pGraph);
CModelDomain* pMD = pBNet->GetModelDomain();
//number of parameters is the same as number of nodes - one CPD per node
// CFactor *myParams = new CFactor[1];
int *nodeNumbers = new int [nnodes];
int domain0[] = { 0 };
int domain1[] = { 1 };
int domain2[] = { 0, 1, 2 };
int domain3[] = { 2, 3 };
int *domains[] = { domain0, domain1, domain2, domain3 };
nodeNumbers[0] = 1;
nodeNumbers[1] = 1;
nodeNumbers[2] = 3;
nodeNumbers[3] = 2;
pBNet->AllocParameters();
CFactor *myParams = CTabularCPD::Create( domains[0], nodeNumbers[0], pMD );
// data creation for all CPDs of the model
float data0[] = { 0.5f, 0.5f };
myParams->AllocMatrix(data0, matTable);
pBNet->AttachParameter(myParams);
float mean0 = 0.0f;
float cov0 = 1.0f;
CGaussianCPD* pCPD = CGaussianCPD::Create( domain1, 1, pMD );
pCPD->AllocDistribution( &mean0, &cov0, 1.0f, NULL);
pBNet->AttachFactor(pCPD);
float mean1[] = { 8.0f };
float mean2[] = { 2.0f };
float cov1[] = { 1.0f };
float cov2[] = { 1.0f };
float weight[] = { 0.01f, 0.03f };
float weight1[] = { 0.01f };
const float *pData = weight;
const float *pData1 = weight1;
CGaussianCPD* pCPD1 = CGaussianCPD::Create( domain2, 3, pMD );
int ParentCom[] = { 0, 1 };
pCPD1->AllocDistribution( mean1, cov1, 0.5f, &pData, &ParentCom[0] );
pCPD1->AllocDistribution( mean2, cov2, 0.5f, &pData, &ParentCom[1] );
pBNet->AttachFactor(pCPD1);
CGaussianCPD* pCPD2 = CGaussianCPD::Create( domain3, 2, pMD );
pCPD2->AllocDistribution( mean1, cov1, 0.5f, &pData1 );
pBNet->AttachFactor(pCPD2);
delete [] nodeTypes;
return pBNet;
}
示例4: 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;
}
示例5: 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;
}
示例6: 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 );
//.........这里部分代码省略.........
示例7: 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);
//.........这里部分代码省略.........
示例8: CreateGaussianExample
// ----------------------------------------------------------------------------
CBNet* CreateGaussianExample(void)
{
CBNet *pBNet;
int i;
const int nnodes = 3;
int numOfNeigh[] = { 1, 2, 1 };
int neigh0[] = { 1 };
int neigh1[] = { 0, 2 };
int neigh2[] = { 1 };
ENeighborType orient0[] = { ntChild };
ENeighborType orient1[] = { ntParent, ntChild };
ENeighborType orient2[] = { ntParent };
int *neigh[] = { neigh0, neigh1, neigh2 };
ENeighborType *orient[] = { orient0, orient1, orient2 };
CGraph *pGraph = CGraph::Create( nnodes, numOfNeigh, neigh, orient );
const int numberOfNodeTypes = 1;
CNodeType *nodeTypes = new CNodeType [numberOfNodeTypes];
nodeTypes[0].SetType(0, 1);
int *nodeAssociation = new int[nnodes];
for (i = 0; i < nnodes; i++)
nodeAssociation[i] = 0;
pBNet = CBNet::Create(nnodes, numberOfNodeTypes, nodeTypes, nodeAssociation, pGraph);
CModelDomain* pMD = pBNet->GetModelDomain();
int domain0[] = { 0 };
int domain1[] = { 0, 1 };
int domain2[] = { 1, 2 };
int *domains[] = { domain0, domain1, domain2 };
float mean0 = 0.0f;
float cov0 = 1.0f;
CGaussianCPD* pCPD = CGaussianCPD::Create( domain0, 1, pMD );
pCPD->AllocDistribution( &mean0, &cov0, 1.0f, NULL );
pBNet->AttachFactor(pCPD);
float meanNode1 = 8.0f;
float covNode1 = 1.0f;
float weightNode1[] = { 0.01f };
pCPD = CGaussianCPD::Create( domain1, 2, pMD );
const float *pData = weightNode1;
pCPD->AllocDistribution( &meanNode1, &covNode1, 0.5f, &pData );
pBNet->AttachFactor(pCPD);
float meanNode2 = 1.0f ;
float covNode2 = 0.01f;
float weightNode2[] = {0.01f};
pCPD = CGaussianCPD::Create( domain2, 2, pMD );
const float *pData2 = weightNode2;
pCPD->AllocDistribution( &meanNode2, &covNode2, 0.5f, &pData2 );
pBNet->AttachFactor(pCPD);
delete [] nodeTypes;
delete [] nodeAssociation;
return pBNet;
}
示例9: CreateAlarmBNet
//.........这里部分代码省略.........
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};
float data25[] = {0.010000f, 0.990000f, 0.010000f, 0.990000f, 0.700000f, 0.300000f, 0.010000f, 0.990000f, 0.050000f, 0.950000f, 0.700000f, 0.300000f, 0.010000f, 0.990000f, 0.050000f, 0.950000f, 0.950000f, 0.050000f, 0.010000f, 0.990000f, 0.050000f, 0.950000f, 0.700000f, 0.300000f, 0.010000f, 0.990000f, 0.050000f, 0.950000f, 0.950000f, 0.050000f, 0.050000f, 0.950000f, 0.050000f, 0.950000f, 0.950000f, 0.050000f, 0.010000f, 0.990000f, 0.010000f, 0.990000f, 0.700000f, 0.300000f, 0.010000f, 0.990000f, 0.050000f, 0.950000f, 0.700000f, 0.300000f, 0.010000f, 0.990000f, 0.050000f, 0.950000f, 0.990000f, 0.010000f, 0.010000f, 0.990000f, 0.050000f, 0.950000f, 0.700000f, 0.300000f, 0.010000f, 0.990000f, 0.050000f, 0.950000f, 0.990000f, 0.010000f, 0.050000f, 0.950000f, 0.050000f, 0.950000f, 0.990000f, 0.010000f, 0.010000f, 0.990000f, 0.010000f, 0.990000f, 0.100000f, 0.900000f, 0.010000f, 0.990000f, 0.010000f, 0.990000f, 0.100000f, 0.900000f, 0.010000f, 0.990000f, 0.010000f, 0.990000f, 0.300000f, 0.700000f, 0.010000f, 0.990000f, 0.010000f, 0.990000f, 0.100000f, 0.900000f, 0.010000f, 0.990000f, 0.010000f, 0.990000f, 0.300000f, 0.700000f, 0.010000f, 0.990000f, 0.010000f, 0.990000f, 0.300000f, 0.700000f};
float data26[] = {0.050000f, 0.900000f, 0.050000f, 0.010000f, 0.090000f, 0.900000f};
float data27[] = {0.980000f, 0.010000f, 0.010000f, 0.300000f, 0.400000f, 0.300000f, 0.010000f, 0.980000f, 0.010000f, 0.400000f, 0.590000f, 0.010000f, 0.980000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.980000f};
float data28[] = {0.100000f, 0.900000f};
float data29[] = {0.333333f, 0.333333f, 0.333333f, 0.010000f, 0.980000f, 0.010000f, 0.980000f, 0.010000f, 0.010000f, 0.333333f, 0.333333f, 0.333333f, 0.333333f, 0.333333f, 0.333333f, 0.010000f, 0.010000f, 0.980000f};
float data30[] = {0.333333f, 0.333333f, 0.333333f, 0.010000f, 0.980000f, 0.010000f, 0.980000f, 0.010000f, 0.010000f, 0.333333f, 0.333333f, 0.333333f, 0.333333f, 0.333333f, 0.333333f, 0.010000f, 0.010000f, 0.980000f};
float data31[] = {0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.970000f, 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.970000f, 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.970000f};
float data32[] = {0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.500000f, 0.480000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.500000f, 0.480000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.600000f, 0.380000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f};
float data33[] = {0.010000f, 0.190000f, 0.800000f, 0.050000f, 0.900000f, 0.050000f};
float data34[] = {0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.050000f, 0.250000f, 0.250000f, 0.450000f, 0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.200000f, 0.750000f, 0.040000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.290000f, 0.300000f, 0.400000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.010000f, 0.900000f, 0.080000f, 0.010000f, 0.010000f, 0.300000f, 0.490000f, 0.200000f, 0.010000f, 0.150000f, 0.250000f, 0.590000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.200000f, 0.700000f, 0.090000f, 0.010000f, 0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.080000f, 0.900000f, 0.970000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.380000f, 0.600000f, 0.010000f, 0.010000f, 0.080000f, 0.900000f, 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.100000f, 0.840000f, 0.050000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f, 0.400000f, 0.580000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.010000f, 0.970000f};
float data35[] = {0.980000f, 0.010000f, 0.010000f, 0.950000f, 0.040000f, 0.010000f, 0.800000f, 0.190000f, 0.010000f, 0.950000f, 0.040000f, 0.010000f, 0.040000f, 0.950000f, 0.010000f, 0.010000f, 0.040000f, 0.950000f, 0.300000f, 0.690000f, 0.010000f, 0.010000f, 0.300000f, 0.690000f, 0.010000f, 0.010000f, 0.980000f};
float data36[] = {0.980000f, 0.010000f, 0.010000f, 0.980000f, 0.010000f, 0.010000f, 0.900000f, 0.090000f, 0.010000f, 0.980000f, 0.010000f, 0.010000f, 0.100000f, 0.850000f, 0.050000f, 0.050000f, 0.200000f, 0.750000f, 0.300000f, 0.600000f, 0.100000f, 0.050000f, 0.400000f, 0.550000f, 0.010000f, 0.090000f, 0.900000f};
float *data[] = { data0, data1, data2, data3, data4,
data5, data6, data7, data8, data9,
data10, data11, data12, data13, data14,
data15, data16, data17, data18, data19,
data20, data21, data22, data23, data24,
data25, data26, data27, data28, data29,
data30, data31, data32, data33, data34,
data35, data36};
for( i = 0; i < nnodes; i++ )
{
myParams[i]->AllocMatrix(data[i], matTable);
pBNet->AttachFactor(myParams[i]);
}
delete [] nodeTypes;
delete[] nodeAssociation;
CContextPersistence xmlContext;
xmlContext.Put(pBNet, "MyModel");
if(!xmlContext.SaveAsXML("myFavoriteObjects.xml"))
{
fprintf(stderr, "Persistence: error!\n");
// something goes wrong – can’t create
}
else
{
fprintf(stderr, "Persistence: good!\n");
}
return pBNet;
}