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;
    }
}
Example #2
0
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;
}