本文整理汇总了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 );
//.........这里部分代码省略.........
示例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: 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());
//.........这里部分代码省略.........
示例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
//.........这里部分代码省略.........
示例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;
}
示例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;
}
//.........这里部分代码省略.........
示例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;
//.........这里部分代码省略.........
示例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;
}
示例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;
//.........这里部分代码省略.........
示例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;
}
示例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);
//.........这里部分代码省略.........
示例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 );
//.........这里部分代码省略.........
示例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);
//.........这里部分代码省略.........
示例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};