1 from squander
import Generative_Quantum_Machine_Learning
4 import matplotlib.pyplot
as plt
5 from scipy.optimize
import curve_fit
7 import dataset_generator
12 if graph_type !=
"custom":
16 mrf_samples = np.random.choice(
17 range(2**mrf.n_vertices), size=dataset_size, p=mrf.distribution
19 training_set = np.array(
21 np.array(list(format(i,
"b").zfill(mrf.n_vertices))).astype(int)
29 return training_set, mrf.distribution, list(nx.find_cliques(mrf.graph))
36 G.add_nodes_from(range(n_nodes))
37 edges = [(x, x+1)
for x
in range(n_nodes-1)]
38 edges.append((n_nodes-1, 0))
40 G.add_edges_from(edges)
45 config = {
"max_inner_iterations":8000,
47 "check_for_convergence":
True,
48 "convergence_length": 20,
49 "output_periodicity": 500}
51 sigma = [0.25, 10, 1000]
52 x = training_set.astype(np.int32)
53 P_star = target_distribution
54 use_lookup_table =
True 58 GQML = Generative_Quantum_Machine_Learning(x, P_star, sigma, qbit_num, use_lookup_table, cliques, use_exact, config)
62 GQML.set_Optimizer(
"COSINE")
65 GQML.set_Ansatz(
"QCMRF")
67 GQML.Generate_Circuit(10, 1)
68 param_num = GQML.get_Parameter_Num()
72 parameters = np.zeros(param_num)
73 GQML.set_Optimized_Parameters(parameters)
74 print(GQML.get_Qiskit_Circuit())
77 initial_state = np.zeros( (1 << qbit_num), dtype=np.complex128 )
78 initial_state[0] = 1.0 + 0j
79 state_to_transform = initial_state.copy()
80 GQML.apply_to( parameters, state_to_transform );
81 P_theta = np.abs(state_to_transform)**2
82 print(
"TV",np.sum(np.abs(P_theta - P_star))/2)
87 parameters = np.zeros(param_num)
88 print(
"MMD", GQML.Optimization_Problem(parameters))
89 GQML.set_Optimized_Parameters(parameters)
90 GQML.Start_Optimization()
91 parameters = GQML.get_Optimized_Parameters()
92 initial_state = np.zeros( (1 << qbit_num), dtype=np.complex128 )
93 initial_state[0] = 1.0 + 0j
94 state_to_transform = initial_state.copy()
95 GQML.apply_to( parameters, state_to_transform );
96 P_theta = np.abs(state_to_transform)**2
97 print(
"TV", np.sum(np.abs(P_theta - P_star))/2)
98 tvs_qcmrf.append(np.sum(np.abs(P_theta - P_star))/2)
106 GQML.set_Ansatz(
"HEA")
108 GQML.Generate_Circuit(1, 1)
109 param_num = GQML.get_Parameter_Num()
110 parameters = np.zeros(param_num)
112 print(GQML.get_Qiskit_Circuit())
113 print(
"MMD", GQML.Optimization_Problem(parameters))
114 GQML.set_Optimized_Parameters(parameters)
115 GQML.Start_Optimization()
116 parameters = GQML.get_Optimized_Parameters()
117 initial_state = np.zeros( (1 << qbit_num), dtype=np.complex128 )
118 initial_state[0] = 1.0 + 0j
119 state_to_transform = initial_state.copy()
120 GQML.apply_to( parameters, state_to_transform );
121 P_theta = np.abs(state_to_transform)**2
122 print(
"TV", np.sum(np.abs(P_theta - P_star))/2)
123 tvs_hea.append(np.sum(np.abs(P_theta - P_star))/2)
def generate_MRF_dataset(n_nodes, graph_type, dataset_size, path=None, G=None)