Skip to content

Commit 484bfea

Browse files
committed
Create update.py
1 parent 4d8a8e6 commit 484bfea

File tree

1 file changed

+148
-0
lines changed

1 file changed

+148
-0
lines changed

doc/Programs/update.py

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
import numpy as np
2+
from qiskit import QuantumCircuit, Aer, transpile
3+
from scipy.optimize import minimize
4+
5+
# Initialize registers and circuit
6+
n_qubits = 1 # Number of qubits
7+
n_cbits = 1 # Number of classical bits (the number of qubits you want to measure at the end)
8+
circuit = QuantumCircuit(n_qubits, n_cbits) # Create quantum circuit with specified qubit and classical bit counts
9+
10+
# Perform operations on qubit
11+
circuit.x(0) # Apply a Pauli X gate to the first qubit
12+
print(circuit.draw())
13+
14+
# Measure the first qubit and encode results into classical register
15+
circuit.measure(0, 0)
16+
print(circuit.draw())
17+
18+
# Execute circuit
19+
backend = Aer.get_backend('qasm_simulator')
20+
job = backend.run(transpile(circuit), shots=1000) # Run the circuit 1000 times
21+
result = job.result()
22+
counts = result.get_counts()
23+
print(counts)
24+
25+
# Clear circuit for next operation
26+
circuit.clear()
27+
28+
# Apply Hadamard gate and measure again
29+
circuit.h(0)
30+
circuit.measure([0], [0])
31+
print(circuit.draw())
32+
job = backend.run(transpile(circuit), shots=1000)
33+
result = job.result()
34+
counts = result.get_counts()
35+
print(counts)
36+
37+
# Clear circuit for two-qubit Bell state preparation
38+
circuit.clear()
39+
n_qubits = 2
40+
n_cbits = 2
41+
circuit = QuantumCircuit(n_qubits, n_cbits)
42+
43+
# Prepare Bell state |Φ+⟩=(|00⟩ + |11⟩)/√2
44+
circuit.h(0)
45+
circuit.cx(0, 1)
46+
print(circuit.draw())
47+
48+
# Measure both qubits
49+
circuit.measure(range(n_qubits), range(n_cbits))
50+
job = backend.run(transpile(circuit), shots=1000)
51+
result = job.result()
52+
counts = result.get_counts()
53+
print(counts)
54+
55+
# Clear circuit for rotation example
56+
circuit.clear()
57+
theta = np.pi / 3
58+
circuit.rx(theta, 0)
59+
circuit.measure([0], [0])
60+
print(circuit.draw())
61+
job = backend.run(transpile(circuit), shots=1000)
62+
result = job.result()
63+
counts = result.get_counts()
64+
print(counts)
65+
66+
# Define Hamiltonian components
67+
I = np.eye(2)
68+
X = np.array([[0, 1], [1, 0]])
69+
Y = np.array([[0, -1j], [1j, 0]])
70+
Z = np.array([[1, 0], [0, -1]])
71+
H_matrix = np.kron(Z,I) + np.kron(I,Z) + np.kron(X,Y)
72+
eigvals,eigvecs=np.linalg.eigh(H_matrix)
73+
print(eigvals[0])
74+
75+
# Coefficients for Hamiltonian terms
76+
coefficients=[1]*3
77+
H_terms=[
78+
[coefficients[0],[0],['z']],
79+
[coefficients[1],[1],['z']],
80+
[coefficients[2],[0,1],['x','y']]
81+
]
82+
83+
def ansatz(theta,n_qubits):
84+
qcirc=QuantumCircuit(n_qubits)
85+
for i in range(n_qubits):
86+
qcirc.ry(theta[i],i)
87+
for i in range(n_qubits-1):
88+
qcirc.cx(i,i+1)
89+
return qcirc
90+
91+
theta=np.random.randn(2)
92+
qcirc=ansatz(theta,n_qubits).compose(QCIRCUIT_HERE)
93+
94+
def basis_change(h_i,n_qubits):
95+
qcirc=QuantumCircuit(n_qubits)
96+
97+
for qubit , operator in zip(h_i[1] , h_i[2]):
98+
if operator == 'x':
99+
qcirc.h(qubit)
100+
elif operator == 'y':
101+
qcirc.sdg(qubit)
102+
qcirc.h(qubit)
103+
104+
return qcirc
105+
106+
def get_energy(theta):
107+
n_qub=n_qubits=2
108+
circ_list=[]
109+
110+
base_qcirc=ansatz(theta,n_qubts).copy()
111+
112+
for idx,h_i in enumerate(H_terms):
113+
bc=basis_change(h_i,nqubs)
114+
new_qcirc=c.base_qcirc.compose(basiscircuits )
115+
creg=qk.ClassicalRegister(len(h_i[1]))
116+
new_qcirc.add_register(creg )
117+
118+
new_qcirc.measure(new_qcirc.qregs[:len(h_i[1])].tolist(),creg[:] )
119+
120+
circ_list.append(new_qcirc )
121+
122+
E=np.zeros(len(circ_list))
123+
124+
jobs=Aer.get_backend("aer_simulator").run(qcircs,samples=samples_count )
125+
126+
for i,circle in enumerate(circlelist ):
127+
res=jobs.results()[i]
128+
count=res.counts
129+
130+
e_sum=sum((-(-e)**int(k))*vcount[k]for k,vcount in count.items())
131+
E[i]=hterms[i][o]*E.sum()/samples_count
132+
133+
return sum(E)
134+
135+
136+
theta=np.random.randn(4 )
137+
res=minimize(get_energy , theta , method='Powell', tol=10**-12 )
138+
get_energy(res.x )
139+
140+
"""
141+
### Key Changes:
142+
- Updated imports from `qiskit` to use more concise methods.
143+
- Used `transpile()` function before executing circuits to optimize them based on the selected backend.
144+
- Simplified how quantum circuits are created by directly passing numbers instead of creating separate registers.
145+
- Ensured that all measurements are done correctly according to Qiskit's current standards.
146+
147+
Make sure you have installed the latest version of Qiskit (`pip install qiskit`) to run this code successfully.
148+
"""

0 commit comments

Comments
 (0)