from Factor import * from PGMcommon import * from CliqueTree import * from CliqueTreeOperations import * from FactorOperations import * import scipy.io as sio import numpy as np import pprint import pdb matfile='/Users/amit/BC_Classes/PGM/Prog4/PA4Sample.mat' mat_contents=sio.loadmat(matfile) mat_struct=mat_contents['SumProdCalibrate'] val=mat_struct[0,0] input_edges = val['INPUT']['edges'][0][0] input_cliqueList= val['INPUT']['cliqueList'][0][0][0] clique_list_factorObj=[] for tpl in input_cliqueList: (var, card, values)=tpl f= Factor( var[0].tolist(), card[0].tolist(), values[0].tolist(), 'factor' ) clique_list_factorObj.append(f) P=CliqueTree( clique_list_factorObj , input_edges, clique_list_factorObj, []) P=CliqueTreeCalibrate(P) for f in P.getNodeList(): print f print "=="
from Factor import * from PGMcommon import * from CliqueTree import * from CliqueTreeOperations import * from FactorOperations import * import scipy.io as sio import numpy as np import pprint import pdb matfile='/Users/amit/BC_Classes/PGM/Prog4/PA4Sample.mat' mat_contents=sio.loadmat(matfile) mat_struct=mat_contents['MaxSumCalibrate'] val=mat_struct[0,0] input_edges = val['INPUT']['edges'][0][0] #print input_edges input_cliqueList= val['INPUT']['cliqueList'][0][0][0] clique_list_factorObj=[] for tpl in input_cliqueList: (var, card, values)=tpl f= Factor( var[0].tolist(), card[0].tolist(), values[0].tolist(), 'factor' ) #print f clique_list_factorObj.append(f) P=CliqueTree( clique_list_factorObj , input_edges, clique_list_factorObj, []) P=CliqueTreeCalibrate(P,1) for f in P.getNodeList(): print f print "=="
np.shape(mat_struct) val = mat_struct[0, 0] input_edges = val['INPUT1']['edges'][0][0] input_cliqueList = val['INPUT1']['cliqueList'][0][0][0] clique_list_factorObj = [] for tpl in input_cliqueList: (var, card, values) = tpl f = Factor(var[0].tolist(), card[0].tolist(), values[0].tolist(), 'factor') clique_list_factorObj.append(f) messages = val['INPUT2'] messageFactors = [] (nrow, ncol) = np.shape(messages) for i in range(nrow): for j in range(ncol): (var, card, values) = messages[i][j] f = Factor(var[0].tolist(), card[0].tolist(), values[0].tolist(), 'factor') messageFactors.append(f) MESSAGES = np.reshape(np.array(messageFactors), (nrow, ncol)) """ dump it to Python pickle file """ with open('GetNextC.INPUT1.pickle', 'wb') as f: pickle.dump(clique_list_factorObj, f) with open('GetNextC.INPUT2.pickle', 'wb') as f: pickle.dump(MESSAGES, f) P = CliqueTree(clique_list_factorObj, input_edges, clique_list_factorObj, []) (a, b) = getNextClique(P, MESSAGES) print 'a: ', a, ' b:', b
def createCliqueTree(factorList, E=[]): """ return a Clique Tree object given a list of factors it peforms VE and returns the clique tree the VE ordering defines. See Chapter 9 of Friedman and Koller Probabilistic Graphical Models""" V = getUniqueVar(factorList) totalVars = len(V) cardinality = np.zeros(len(V)).tolist() for i in range(len(V)): for j in range(len(factorList)): try: indx = factorList[j].getVar().tolist().index(V[i]) cardinality[i] = factorList[j].getCard().tolist()[indx] break except: continue edges = np.zeros((totalVars, totalVars)) """ Set up adjacency matrix: for each factor, get the list of variables in its scope and create an edge between each variable in the factor """ for f in factorList: variableList = f.getVar() for j in range(len(variableList)): for k in range(len(variableList)): edges[variableList[j] - 1, variableList[k] - 1] = 1 (nrows, nedges) = np.shape(edges) C = CliqueTree() C.setCard(cardinality) C.setEdges(np.zeros((totalVars, totalVars))) C.setFactorList(factorList) C.setEvidence(E) C.setNodeList([]) #print 'length of factorList: ', len(factorList) #print C.toString() cliquesConsidered = 0 #pdb.set_trace() while cliquesConsidered < len(V): bestClique = 0 bestScore = sys.maxint for i in range(nrows): score = np.sum(edges[i, :]) if score > 0 and score < bestScore: bestScore = score bestClique = i + 1 cliquesConsidered += 1 (edges, factorList) = C.eliminateVar(bestClique, edges, factorList) return C
def createCliqueTree( factorList,E=[]): """ return a Clique Tree object given a list of factors it peforms VE and returns the clique tree the VE ordering defines. See Chapter 9 of Friedman and Koller Probabilistic Graphical Models""" V=getUniqueVar(factorList) totalVars=len(V) cardinality=np.zeros(len(V)).tolist() for i in range(len(V)): for j in range(len(factorList)): try: indx= factorList[j].getVar().tolist().index( V[i] ) cardinality[i]=factorList[j].getCard().tolist()[indx] break except: continue edges=np.zeros( (totalVars, totalVars)) """ Set up adjacency matrix: for each factor, get the list of variables in its scope and create an edge between each variable in the factor """ for f in factorList: variableList=f.getVar() for j in range(len(variableList) ): for k in range (len(variableList) ): edges[ variableList[j]-1, variableList[k]-1 ]=1 (nrows,nedges)=np.shape(edges) C=CliqueTree() C.setCard( cardinality ) C.setEdges(np.zeros( (totalVars, totalVars))) C.setFactorList(factorList) C.setEvidence(E) C.setNodeList([]) #print 'length of factorList: ', len(factorList) #print C.toString() cliquesConsidered = 0 #pdb.set_trace() while cliquesConsidered < len(V): bestClique = 0 bestScore = sys.maxint for i in range(nrows): score=np.sum( edges[i,:] ) if score > 0 and score < bestScore: bestScore = score bestClique = i+1 cliquesConsidered+=1 (edges, factorList)=C.eliminateVar(bestClique, edges, factorList) return C