12 G.add_nodes_from(range(n))
17 edges.append([i*n1+j, i*n1+j+1])
21 edges.append([j*n1+i, (j+1)*n1+i])
23 G.add_edges_from(edges)
31 G.add_nodes_from(range(n))
36 edges.append([i*n1+j, i*n1+j+1])
40 edges.append([j*n1+i, (j+1)*n1+i])
44 edges.append([i*n1+j, (i+1)*n1+j+1])
47 for j
in range(1, n1):
48 edges.append([i*n1+j, (i+1)*n1+j-1])
52 edges+=[[n-1, n-2], [n-1, n-4], [n-1, n-5], [n-2, n-3], [n-2, n-4], [n-2, n-5], [n-2, n-6],
53 [n-3, n-5], [n-3, n-6]]
55 G.add_edges_from(edges)
62 G.remove_edges_from([[i, i+n1-1]
for i
in range(n)])
68 G.add_nodes_from(range(n))
73 edges.append([i-2, i])
74 edges.append([i-1, i])
76 G.add_edges_from(edges)
89 def __init__(self, graph_type, n_vertices, factor_dist = "uniform", G = None):
90 self.
name =
'GeneralBinaryMRF' 95 self.
graph = undirected_graphs[graph_type](n_vertices)
101 self.
cliques = [np.sort(c).tolist()
for c
in nx.find_cliques(self.
graph)]
104 if factor_dist ==
"uniform":
109 assignment = np.array(list(bin(i)[2:].zfill(self.
n_vertices))).astype(int)
111 for j, c
in enumerate(self.
cliques):
113 for l, v
in enumerate(c):
114 k += assignment[v] * (2**l)
122 file = open(path+
"/mrf.bin",
'wb')
123 pickle.dump(self,file)
130 mrf_samples = np.random.choice(
131 range(2**mrf.n_vertices), size=dataset_size, p=mrf.distribution
133 training_set = np.array(
135 np.array(list(format(i,
"b").zfill(mrf.n_vertices))).astype(int)
143 return training_set, mrf.distribution, list(nx.find_cliques(mrf.graph))
145 if __name__ ==
"__main__":
149 saveas =
"dataset.txt" 153 np.savetxt(saveas, training_set.astype(int))
def generate_MRF_dataset(n_nodes, graph_type, dataset_size, path=None)
def __init__(self, graph_type, n_vertices, factor_dist="uniform", G=None)