quantum_instance = QuantumInstance( backend=BasicAer.get_backend('statevector_simulator')) print("quantum_instance set") # Set entangler map entangler_map = [[0, 1]] # Set an initial state for the generator circuit init_dist = UniformDistribution(sum(num_qubits), low=bounds[0], high=bounds[1]) q = QuantumRegister(sum(num_qubits), name='q') qc = QuantumCircuit(q) init_dist.build(qc, q) init_distribution = Custom(num_qubits=sum(num_qubits), circuit=qc) var_form = TwoLocal(int(np.sum(num_qubits)), 'ry', 'cz', entanglement=entangler_map, reps=1, initial_state=init_distribution) # Set generator's initial parameters init_params = aqua_globals.random.rand( var_form.num_parameters_settable) * 2 * np.pi # Set generator circuit g_circuit = UnivariateVariationalDistribution(int(sum(num_qubits)), var_form, init_params, low=bounds[0], high=bounds[1]) print("g_circuit set") # Set quantum generator qgan.set_generator(generator_circuit=g_circuit) # Set classical discriminator neural network discriminator = NumPyDiscriminator(len(num_qubits)) qgan.set_discriminator(discriminator)
def QGAN_method(kk, num_qubit, epochs, batch, bound, snap, data): start = time.time() real_data = data # In[41]: # Number training data samples N = 1000 # Load data samples from log-normal distribution with mean=1 and standard deviation=1 mu = 1 sigma = 1 # real_data = np.random.lognormal(mean = mu, sigma=sigma, size=N) # print(real_data) # Set the data resolution # Set upper and lower data values as list of k min/max data values [[min_0,max_0],...,[min_k-1,max_k-1]] bounds = np.array([0, bound]) # Set number of qubits per data dimension as list of k qubit values[#q_0,...,#q_k-1] num_qubits = [num_qubit] k = kk # In[52]: # Set number of training epochs # Note: The algorithm's runtime can be shortened by reducing the number of training epochs. num_epochs = epochs # Batch size batch_size = batch # Initialize qGAN qgan = QGAN(real_data, bounds, num_qubits, batch_size, num_epochs, snapshot_dir=snap) qgan.seed = 1 # Set quantum instance to run the quantum generator quantum_instance = QuantumInstance( backend=BasicAer.get_backend('statevector_simulator')) # Set entangler map entangler_map = [[0, 1]] # Set an initial state for the generator circuit init_dist = UniformDistribution(sum(num_qubits), low=bounds[0], high=bounds[1]) q = QuantumRegister(sum(num_qubits), name='q') qc = QuantumCircuit(q) init_dist.build(qc, q) init_distribution = Custom(num_qubits=sum(num_qubits), circuit=qc) var_form = RY(int(np.sum(num_qubits)), depth=k, initial_state=init_distribution, entangler_map=entangler_map, entanglement_gate='cz') # Set generator's initial parameters init_params = aqua_globals.random.rand( var_form._num_parameters) * 2 * np.pi # Set generator circuit g_circuit = UnivariateVariationalDistribution(int(sum(num_qubits)), var_form, init_params, low=bounds[0], high=bounds[1]) # Set quantum generator qgan.set_generator(generator_circuit=g_circuit) # Set classical discriminator neural network discriminator = NumPyDiscriminator(len(num_qubits)) qgan.set_discriminator(discriminator) # In[53]: # Run qGAN qgan.run(quantum_instance) # Runtime end = time.time() print('qGAN training runtime: ', (end - start) / 60., ' min') return qgan