Code: Select all
void printCPT(DSL_node* node) {
DSL_network* net = node->Network(); // node network
int nid = node->Handle(); // node id
const char* name = node->GetId(); // node name
DSL_idArray* nstates = node->Definition()->GetOutcomesNames(); // names of node states
DSL_intArray parents = net->GetParents(nid); // names of node's parents
DSL_sysCoordinates coords(*(node->Definition())); // node coordinate navigator
int result = DSL_OKAY;
coords.GoFirst();
while (result != DSL_OUT_OF_RANGE) {
DSL_intArray cix = coords.Coordinates(); // array of state indexes for parents, node
int six = cix[ cix.GetSize()-1 ]; // node's state index
const char* state = (*nstates)[six]; // node's state name
cout << "P(" << name << " = " << state << " | ";
for (int pix = 0; pix < cix.GetSize() - 1; pix++) { // iterate parent nodes
int pid = parents[pix]; // parent node handle
six = cix[pix]; // parent node state index
DSL_node* pnode = net->GetNode(pid); // parent node
const char* pname = pnode->Info().Header().GetId(); // parent node name
DSL_idArray* pstates = pnode->Definition()->GetOutcomesNames(); // parent node state names
cout << pname << " = " << (*pstates)[six];
if (pix + 1 < cix.GetSize() - 1) { cout << ", "; }
}
double prob = coords.UncheckedValue();
cout << ") = " << prob << endl;
result = coords.Next();
}
}