void printCPT(DSL_node *node) { DSL_network* net = node->Network(); // node network int handle = node->Handle(); DSL_nodeDefinition *def = node->Definition(); const DSL_Dmatrix &cpt = *def->GetMatrix(); const DSL_idArray &outcomes = *def->GetOutcomesNames(); const DSL_intArray &parents = net->GetParents(handle); int parentCount = parents.NumItems(); DSL_intArray coords; // for (int elemIdx = 0; elemIdx < cpt.GetSize(); elemIdx ++) { for (int parentIdx = 0; parentIdx < parentCount; parentIdx ++){ } } for (int elemIdx = 0; elemIdx < cpt.GetSize(); elemIdx ++) { string name = ""; cpt.IndexToCoordinates(elemIdx, coords); //cout << "P(" << node->GetId() << " = " << outcomes[coords[parentCount]] << " | "; for (int parentIdx = 0; parentIdx < parentCount; parentIdx ++) { DSL_node *parentNode = net->GetNode(parents[parentIdx]); if(elemIdx == 0) { cout << parentNode->GetId()<< " "; if(parentIdx == parentCount-1) { cout<< node->GetId() <<endl; } } const DSL_idArray &parentStates = *parentNode->Definition()->GetOutcomesNames(); //cout << parentNode->GetId() << " = " << parentStates[coords[parentIdx]]; name += parentStates[coords[parentIdx]]; name += " "; } name += outcomes[coords[parentCount]]; cout << name << " " << cpt[elemIdx] << endl; //cout << ") = " << cpt[elemIdx] << endl; } }
cptMap get_cptmap(DSL_node *node) { DSL_network* net = node->Network(); // node network int handle = node->Handle(); DSL_nodeDefinition *def = node->Definition(); const DSL_Dmatrix &cpt = *def->GetMatrix(); const DSL_idArray &outcomes = *def->GetOutcomesNames(); const DSL_intArray &parents = net->GetParents(handle); int parentCount = parents.NumItems(); DSL_intArray coords; cptMap cptmap; for (int elemIdx = 0; elemIdx < cpt.GetSize(); elemIdx ++) { cpt.IndexToCoordinates(elemIdx, coords); //cout << "P(" << node->GetId() << " = " << outcomes[coords[parentCount]] << " | "; keyMap km; for (int parentIdx = 0; parentIdx < parentCount; parentIdx ++) { // if (parentIdx > 0) cout << ", "; DSL_node *parentNode = net->GetNode(parents[parentIdx]); const DSL_idArray &parentStates = *parentNode->Definition()->GetOutcomesNames(); km[string(parentNode->GetId())] = string(parentStates[coords[parentIdx]]); //cout << parentNode->GetId() << " = " << parentStates[coords[parentIdx]]; } //printMap(km); if (cptmap.count(km) == 0){ valMap vm; vm[string(outcomes[coords[parentCount]])] = cpt[elemIdx]; cptmap[km] = vm; } else { cptmap[km][string(outcomes[coords[parentCount]])] = cpt[elemIdx]; } //cout << ") = " << cpt[elemIdx] << endl; } return cptmap; }