Tamil
மொழிகள்
English
Bengali
French
German
Japanese
Korean
Portuguese
Spanish
Tamil

Note

இந்தப் பக்கம் tutorials/algorithms/09_IQPE.ipynb இலிருந்து உருவாக்கப்பட்டது.

மறுபயன்பாட்டு குவாண்டம் கட்ட மதிப்பீடு வழிமுறை

இந்த டுடோரியலின் குறிக்கோள், படிநிலை கட்ட மதிப்பீடு (IPE) வழிமுறை எவ்வாறு செயல்படுகிறது, QPE (Quantum Phase Estimation) அல்காரிதத்திற்குப் பதிலாக நாம் ஏன் IPE அல்காரிதத்தைப் பயன்படுத்துகிறோம் மற்றும் அதே சர்க்யூட் சுரண்டல் மீட்டமைப்பு வாயிலைப் பயன்படுத்தி அதை எப்படி உருவாக்கலாம் முந்தைய அளவீடுகளின் விளைவாக கிளாசிக்கல் பதிவேட்டில் சேமிக்கப்பட்ட மதிப்புகளால் நிபந்தனைக்குட்பட்ட வாயில்களைப் பயன்படுத்த அனுமதிக்கும் c_if முறை.

** குறிப்புகள் **

[1]:
from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister, execute, assemble, Aer
from qiskit.tools.visualization import plot_histogram
from math import pi
import matplotlib.pyplot as plt

நிபந்தனைக்குட்பட்ட வாயில்கள்: c_if முறை

IPE வழிமுறையைத் தொடங்குவதற்கு முன், qiskit நிபந்தனை முறை, c_if பற்றி ஒரு சுருக்கமான பயிற்சிகளைக் கொடுப்போம், ஏனெனில் இது IPE சுற்றுவட்டத்தை உருவாக்குகிறது.

c_if என்பது ஒரு பாரம்பரிய பதிவேட்டில் முன்பு சேமிக்கப்பட்ட மதிப்பின் அடிப்படையில் நிபந்தனைக்குட்பட்ட செயல்பாடுகளைச் செய்வதற்கான ஒரு செயல்பாடு (உண்மையில் கேட் வகுப்பின் முறை) ஆகும். இந்த அம்சத்தின் மூலம் அளவீட்டு முடிவுகளால் நிபந்தனைக்குட்பட்ட அதே சுற்றில் ஒரு அளவீட்டுக்குப் பிறகு நீங்கள் வாயில்களைப் பயன்படுத்தலாம்.

எடுத்துக்காட்டாக, பின்வரும் குறியீடு கிளாசிக்கல் பதிவின் மதிப்பு என்றால் \(X\) கேட் \(0\).

[2]:
q = QuantumRegister(1,'q')
c = ClassicalRegister(1,'c')
qc = QuantumCircuit(q, c)
qc.h(0)
qc.measure(0,0)
qc.x(0).c_if(c, 0)
qc.draw(output='mpl')
[2]:
../../_images/tutorials_textbook_01_IQPE_4_0.png

c_if முறை முதல் கிளாசிக்கல் பதிவேடு, ஒரு கிளாசிக்கல் பிட் (அல்லது கிளாசிக்கல் பிட்களின் பட்டியல்) அல்ல, இரண்டாவது வாதமாக தசம பிரதிநிதித்துவத்தில் ஒரு மதிப்பு (எதிர்மறை அல்லாத முழு எண்) எதிர்பார்க்கிறது என்பதை நாங்கள் முன்னிலைப்படுத்துகிறோம். ஒற்றை பிட், 0, அல்லது 1 (அல்லது பைனரி இலக்கங்களின் பட்டியல் / சரம்) மதிப்பு.

Let’s make another example. Consider that we want to perform a bit flip on the third qubit after the measurements in the following circuit, when the results of the measurement of \(q_0\) and \(q_1\) are both \(1\).

[3]:
q = QuantumRegister(3,'q')
c = ClassicalRegister(3,'c')
qc = QuantumCircuit(q, c)
qc.h(q[0])
qc.h(q[1])
qc.h(q[2])
qc.barrier()
qc.measure(q,c)
qc.draw('mpl')
[3]:
../../_images/tutorials_textbook_01_IQPE_6_0.png

\(q_0\) மற்றும் \(q_1\) ஆகியவற்றின் அளவீட்டின் இரண்டு முடிவுகளும் \(1\) ஆக இருந்தால் மட்டுமே, \(X\) வாயிலைப் பயன்படுத்த விரும்புகிறோம். c_if முறையைப் பயன்படுத்தி நாம் இதைச் செய்யலாம், c_if க்கு வாதமாக அனுப்பப்பட்ட மதிப்பைப் பொறுத்து \(X\) பயன்பாட்டைக் கண்டிஷனிங் செய்யலாம்.

c_if முறைக்கு அனுப்ப மதிப்பைக் குறியாக்கம் செய்ய வேண்டும், அது 011 மற்றும் 111 (பைனரி பிரதிநிதித்துவத்தில்) மதிப்புகளைச் சரிபார்க்கும், ஏனெனில் அது என்ன \(q_2\) என அளவிடப்படுகிறது.

தசம பிரதிநிதித்துவத்தில் 2 முழு மதிப்புகள்:

901b8751ef914b569ac6ab6a4af936f6

பைத்தானில் bin() முறையைப் பயன்படுத்தி தீர்வுகளை நாம் சரிபார்க்கலாம் (0b முன்னொட்டு பைனரி வடிவமைப்பைக் குறிக்கிறது).

[4]:
print(bin(3))
print(bin(7))
0b11
0b111

எனவே நாம் விண்ணப்பிக்க வேண்டும் \(X\) முதல் \(q_2\) இரண்டு முறை c_if ஐப் பயன்படுத்துகிறது, 011 மற்றும் 111 உடன் தொடர்புடைய ஒவ்வொரு மதிப்புக்கும் ஒன்று.

[5]:
q = QuantumRegister(3,'q')
c = ClassicalRegister(3,'c')
qc = QuantumCircuit(q, c)
qc.h(0)
qc.h(1)
qc.h(2)
qc.barrier()
qc.measure(q,c)

qc.x(2).c_if(c, 3) # for the 011 case
qc.x(2).c_if(c, 7) # for the 111 case

qc.draw(output='mpl')
[5]:
../../_images/tutorials_textbook_01_IQPE_12_0.png

IPE

The motivation for using the IPE algorithm is that QPE algorithm works fine for short depth circuits but when the circuit starts to grow, it doesn’t work properly due to gate noise and decoherence times.

வழிமுறை எவ்வாறு செயல்படுகிறது என்பதற்கான விரிவான விளக்கத்தை Iterative Phase Estimation (IPE) Algorithm. QPE ஐ ஆழமாக புரிந்து கொள்ள, நீங்கள் Ch.3.6 Quantum Phase Estimation காணலாம்.

இதற்கான 1-க்யூபிட் கேட்டுடன் IPE எடுத்துக்காட்டு \(U\)

1-க்யூபிட் ஆபரேட்டருக்கான கட்டத்தை மதிப்பிடுவதற்கு IPE வழிமுறையைப் பயன்படுத்த விரும்புகிறோம் \(U\). எடுத்துக்காட்டாக, இங்கே நாம் \(S\)-கேட் பயன்படுத்துகிறோம்.

Let’s apply the IPE algorithm to estimate the phase for \(S\)-gate. Its matrix is

\[\begin{split} S = \begin{bmatrix} 1 & 0\\ 0 & e^\frac{i\pi}{2}\\ \end{bmatrix}\end{split}\]

அதாவது, \(S\)-கேட் ஒரு கட்டத்தை சேர்க்கிறது \(\pi/2\) நிலைக்கு \(|1\rangle\), நிலையின் கட்டத்தை மாற்றாமல் விட்டுவிடுகிறது \(|0\rangle\)

\[S|1\rangle = e^\frac{i\pi}{2}|1\rangle\]

பின்வருவனவற்றில், Section 2 of lab 4 இல் பயன்படுத்தப்படும் குறியீடு மற்றும் சொற்களைப் பயன்படுத்துவோம்.

Let’s consider to estimate the phase \(\phi=\frac{\pi}{2}\) for the eigenstate \(|1\rangle\), we should find \(\varphi=\frac{1}{4}\) (where \(\phi = 2 \pi \varphi\)). Therefore to estimate the phase we need exactly 2 phase bits, i.e. \(m=2\), since \(1/2^2=1/4\). So \(\varphi=0.\varphi_1\varphi_2\).

கோட்பாட்டிலிருந்து IPE வழிமுறைக்கு, \(m\) என்பது மறு செய்கைகளின் எண்ணிக்கையாகும், எனவே நமக்குத் தேவை \(2\) மறு செய்கைகள் அல்லது படிகள்.

முதலில், நாம் சுற்று ஆரம்பிக்கிறோம். \(m\) QPE வழிமுறைகளின் எண்ணிக்கையை கணக்கிடுவதற்குப் பதிலாக, 1 துணை க்யூபிட் உடன் மட்டுமே IPE வேலை செய்கிறது.எனவே, எங்களுக்கு 2 க்யூபிட்ஸ், 1 துணை க்யூபிட் மற்றும் 1 ஐஜென்ஸ்டேட்: \(U\)-கேட் மற்றும் 2 பிட்களின் கிளாசிக்கல் பதிவு, கட்ட பிட்களுக்கு \(\varphi_1\), \(\varphi_2\).

[6]:
nq = 2
m = 2
q = QuantumRegister(nq,'q')
c = ClassicalRegister(m,'c')

qc_S = QuantumCircuit(q,c)

முதல் படி

இப்போது நாம் முதல் படிக்கான குவாண்டம் சர்க்யூட்டை உருவாக்குகிறோம், அதாவது, அல்காரிதத்தின் முதல் மறு செய்கை, மிகக் குறைவான முக்கிய கட்ட பிட் \(\varphi_m\), இந்த விஷயத்தில் \(\varphi_2\) ஐ மதிப்பிடுவதற்கு. முதல் படிக்கு நம்மிடம் 3 துணை படிகள் உள்ளன: - துவக்குதல் - கட்டுப்படுத்தப்பட்ட-\(U\) வாயில்களின் பயன்பாடு - x-அடிப்படையில் துணை குவிட்டின் அளவு

துவக்கம்

துவக்கத்தில் ஹடாமார்ட் கேட் துணை க்யூபிட் மற்றும் ஐஜென்ஸ்டேட் \(|1\rangle\) தயாரிப்பை உள்ளடக்கியது.

[7]:
qc_S.h(0)
qc_S.x(1)
qc_S.draw('mpl')
[7]:
../../_images/tutorials_textbook_01_IQPE_16_0.png

கட்டுப்படுத்தப்பட்ட-\(U\) வாயில்களின் பயன்பாடு

பிறகு நாம் \(2^t\) முறை Controlled-\(U\) ஆபரேட்டர்களைப் பயன்படுத்த வேண்டும் (டாக்ஸில் இரண்டு குவிட் கேட்கள்), இந்த எடுத்துக்காட்டில், Controlled-\(S\) gate (\(CS\) சுருக்கமாக).

\(CS\) சுற்றில் செயல்படுத்த, \(S\) ஒரு கட்ட கேட் என்பதால், கட்டுப்படுத்தப்பட்ட கட்ட கேட்டைப் பயன்படுத்தலாம் \(\text{CP}(\theta)\), உடன் \(\theta=\pi/2\).

[8]:
cu_circ = QuantumCircuit(2)
cu_circ.cp(pi/2,0,1)
cu_circ.draw('mpl')
[8]:
../../_images/tutorials_textbook_01_IQPE_18_0.png

Let’s apply \(2^t\) times \(\text{CP}(\pi/2)\). Since for the first step \(t=m-1\), and \(m=2\), we have \(2^t=2\).

[9]:
for _ in range(2**(m-1)):
    qc_S.cp(pi/2,0,1)
qc_S.draw('mpl')
[9]:
../../_images/tutorials_textbook_01_IQPE_20_0.png

X- அடிப்படையில் அளவிடவும்

இறுதியாக, துணை குவிட்டின் அளவீட்டை x-அடிப்படையில் செய்கிறோம். எனவே x_measure ஐச் செயல்படுத்த ஒரு செயல்பாட்டை வரையறுப்போம், பின்னர் அதைப் பயன்படுத்துவோம்.

[10]:
def x_measurement(qc, qubit, cbit):
    """Measure 'qubit' in the X-basis, and store the result in 'cbit'"""
    qc.h(qubit)
    qc.measure(qubit, cbit)

இந்த வழியில் நாம் கட்டம் பிட் \(\varphi_2\) மற்றும் கிளாசிக்கல் பிட் \(c_0\) இல் சேமிக்கிறோம்.

[11]:
x_measurement(qc_S, q[0], c[0])
qc_S.draw('mpl')
[11]:
../../_images/tutorials_textbook_01_IQPE_24_0.png

அடுத்தடுத்த படிகள் (2 வது படி)

இப்போது மீதமுள்ள மற்ற படிகளுக்கு குவாண்டம் சர்க்யூட்டை உருவாக்குகிறோம், இந்த எடுத்துக்காட்டில், இரண்டாவது மட்டுமே. இந்தப் படிகளில் 4 துணைப் படிகள் உள்ளன: முதல் படியில் உள்ளதைப் போன்ற 3 துணைப் படிகள் மற்றும் நடுவில், கட்டத் திருத்தத்தின் கூடுதல் படி - மீட்டமைப்புடன் தொடங்குதல் - கட்டத் திருத்தம் - கட்டுப்படுத்தப்பட்ட பயன்பாடு-:math:` U` வாயில்கள் - x-அடிப்படையில் துணை குவிட்டின் அளவீடு

மீட்டமைப்புடன் துவக்கம்

அதே சுற்றில் ஒரு மறு செயல்பாட்டு வழிமுறையை நாம் செய்ய விரும்புவதால், அளவீட்டு கேட்க்குப் பிறகு துணை க்யூபிட் \(q0\) ஐ மீட்டமைக்க வேண்டும் மற்றும் க்யூபிட்டை மறுசுழற்சி செய்வதற்கு முன்பு மீண்டும் தொடங்க வேண்டும்.

[12]:
qc_S.reset(0)
qc_S.h(0)
qc_S.draw('mpl')
[12]:
../../_images/tutorials_textbook_01_IQPE_26_0.png

கட்ட திருத்தம் (படி 2 க்கு)

As seen in the theory, in order to extract the phase bit \(\varphi_{1}\), we perform a phase correction of \(-\pi\varphi_2/2\). Of course, we need to apply the phase correction in the circuit only if the phase bit \(\varphi_2=1\), i.e. we have to apply the phase correction of \(-\pi/2\) only if the classical bit \(c_0\) is 1.

எனவே, மீட்டமைப்புக்குப் பிறகு நாம் கட்ட கேட்டைப் பயன்படுத்துகிறோம் \(P(\theta)\) கட்டத்துடன் \(\theta=-\pi/2\) கிளாசிக்கல் பிட் நிபந்தனைக்குட்பட்டது \(c_0\)) c_if முறையைப் பயன்படுத்துதல். இந்த பயிற்சில் முதல் பகுதியில் நாம் பார்த்தது போல, 1 இன் மதிப்புடன் c_if முறையை நாம் பயன்படுத்த வேண்டும் \(1_{10} = 001_{2}\) (சந்தாக்கள் \(_{10}\) மற்றும் \(_2\) தசம மற்றும் பைனரி பிரதிநிதித்துவங்களைக் குறிக்கிறது).

[13]:
qc_S.p(-pi/2,0).c_if(c,1)
qc_S.draw('mpl')
[13]:
../../_images/tutorials_textbook_01_IQPE_28_0.png

கட்டுப்படுத்தப்பட்ட-\(U\) வாயில்களின் பயன்பாடு மற்றும் x-அளவீடு (படி 2 க்கு)

முதல் படியில் செய்ததைப் போலவே \(CU\) செயல்பாடுகளைப் பயன்படுத்துகிறோம். இரண்டாவது படிக்கு நம்மிடம் உள்ளது \(t=m-2\), எனவே \(2^t=1\). எனவே நாம் \(\text{CP}(\pi/2)\) ஐ ஒருமுறை பயன்படுத்துகிறோம். பின்னர் நாம் qubit \(q_0\) இன் x-அளவைச் செய்கிறோம், இதன் விளைவாக, பைட் \(\varphi 1\) என்ற சொற்றொடரை கிளாசிக்கல் பதிவேட்டின் பிட் \(c_1\) இல் சேமிக்கிறோம்.

[14]:
## 2^t c-U operations (with t=m-2)
for _ in range(2**(m-2)):
    qc_S.cp(pi/2,0,1)

x_measurement(qc_S, q[0], c[1])

Et voilà, எங்கள் இறுதி சுற்று உள்ளது

[15]:
qc_S.draw('mpl')
[15]:
../../_images/tutorials_textbook_01_IQPE_32_0.png

Let’s execute the circuit with the qasm_simulator, the simulator without noise that run locally.

[16]:
sim = Aer.get_backend('qasm_simulator')
count0 = execute(qc_S, sim).result().get_counts()

key_new = [str(int(key,2)/2**m) for key in list(count0.keys())]
count1 = dict(zip(key_new, count0.values()))

fig, ax = plt.subplots(1,2)
plot_histogram(count0, ax=ax[0])
plot_histogram(count1, ax=ax[1])
plt.tight_layout()

படத்தில் எங்களிடம் அதே ஹிஸ்டோகிராம்கள் உள்ளன, ஆனால் இடதுபுறத்தில் x- அச்சில் கட்ட பிட்கள் கொண்ட சரம் உள்ளது \(\varphi_1\), \(\varphi_2\) மற்றும் வலதுபுறத்தில் உண்மையான கட்டம் தசம பிரதிநிதித்துவத்தில் \(\varphi\).

நாம் எதிர்பார்த்தது போல் நாம் கண்டறிந்தோம் \(\varphi=\frac{1}{4}=0.25\) உடன் \(100\%\) நிகழ்தகவு.

2-க்யூபிட் கேட்யுடன் IPE உதாரணம்

Now, we want to apply the IPE algorithm to estimate the phase for a 2-qubit gate \(U\). For this example, let’s consider the controlled version of the \(T\) gate, i.e. the gate \(U=\textrm{Controlled-}T\) (that from now we will express more compactly with \(CT\)). Its matrix is

\[\begin{split} CT = \begin{bmatrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & e^\frac{i\pi}{4}\\ \end{bmatrix}\end{split}\]

அதாவது, \(CT\) கேட் ஒரு கட்டத்தை சேர்க்கிறது \(\pi/4\) மாநிலத்திற்கு: \(|11\rangle\), மற்ற கணக்கீட்டு அடிப்படையின் நிலை மாறாமல் விட்டுவிடுகிறது: \(|00\rangle\), \(|01\rangle\), \(|10\rangle\).

Let’s consider to estimate the phase \(\phi=\pi/4\) for the eigenstate \(|11\rangle\), we should find \(\varphi=1/8\), since \(\phi = 2 \pi \varphi\). Therefore to estimate the phase we need exactly 3 classical bits, i.e. \(m=3\), since \(1/2^3=1/8\). So \(\varphi=0.\varphi_1\varphi_2\varphi_3\).

1-க்யூபிட் \(U\) ஆபரேட்டருக்கான எடுத்துக்காட்டுடன் நாம் அதே படிகளைச் செய்வோம் ஆனால் இந்த முறை நமக்கு இருக்கும் \(3\) படிகள் \(m=3\), மற்றும் நாங்கள் செய்வோம் அனைத்து விளக்கங்களையும் மீண்டும் செய்ய வேண்டாம். எனவே விவரங்களுக்கு 1-க்யூபிட் \(U\) கேட் மேலே உள்ள உதாரணத்தைப் பார்க்கவும்.

முதலில், 3 க்யூபிட், 1 துணை க்யூபிட் மற்றும் 2-க்யூபிட் கேட், மற்றும் 3 கிளாசிக்கல் பிட்கள், கட்ட பிட்களை சேமித்து வைப்பதற்கான சர்க்யூட்டை துவக்குகிறோம் \(\varphi_1\), \(\varphi_2\), \(\varphi_3\).

[17]:
nq = 3    # number of qubits
m = 3    # number of classical bits
q = QuantumRegister(nq,'q')
c = ClassicalRegister(m,'c')

qc = QuantumCircuit(q,c)

முதல் படி

குறைந்தபட்ச குறிப்பிடத்தக்க கட்ட பிட்டை மதிப்பிடுவதற்கு இப்போது முதல் கட்டத்திற்கு குவாண்டம் சுற்றுகளை உருவாக்குகிறோம்: \(\varphi_m=\varphi_3\).

துவக்கம்

துணை குவிட் மற்றும் பிற குவிட்களை eigenstate \(|11\rangle\) மூலம் துவக்குகிறோம்.

[18]:
qc.h(0)
qc.x([1,2])
qc.draw('mpl')
[18]:
../../_images/tutorials_textbook_01_IQPE_39_0.png

கட்டுப்படுத்தப்பட்ட-\(U\) வாயில்களின் பயன்பாடு

பிறகு நாம் பல முறை \(CU\) ஆபரேட்டரைப் பயன்படுத்த வேண்டும், இந்த எடுத்துக்காட்டில், Controlled-\(CT\) கேட் (\(CCT\) சுருக்கமாக).

செயல்படுத்த \(CCT\) சுற்றில், ஏனெனில் \(T\) என்பது ஒரு கட்ட கேட், நாம் பல கட்டுப்பாட்டு கட்ட கேட்டைப் பயன்படுத்தலாம் \(\text{MCP}(\theta)\), உடன் \(\theta=\pi/4\).

[19]:
cu_circ = QuantumCircuit(nq)
cu_circ.mcp(pi/4,[0,1],2)
cu_circ.draw('mpl')
[19]:
../../_images/tutorials_textbook_01_IQPE_41_0.png

Let’s apply \(2^t\) times \(\text{MCP}(\pi/4)\). Since for the first step \(t=m-1\) and \(m=3\), we have \(2^t=4\).

[20]:
for _ in range(2**(m-1)):
    qc.mcp(pi/4,[0,1],2)
qc.draw('mpl')
[20]:
../../_images/tutorials_textbook_01_IQPE_43_0.png

X- அடிப்படையில் அளவிடவும்

இறுதியாக, துணை குவிட்டின் அளவீட்டை x-அடிப்படையில் செய்கிறோம். 1-குபிட் கேட்டிற்கான எடுத்துக்காட்டில் மேலே வரையறுக்கப்பட்டுள்ள x_measurement செயல்பாட்டைப் பயன்படுத்தலாம். இந்த வழியில் நாம் கட்ட பிட் \(\varphi_3\) ஐப் பெற்று அதைக் கிளாசிக்கல் பிட்டில் \(c_0\) இல் சேமித்துள்ளோம்.

[21]:
x_measurement(qc, q[0], c[0])
qc.draw('mpl')
[21]:
../../_images/tutorials_textbook_01_IQPE_45_0.png

அடுத்தடுத்த படிகள் (2 வது, 3 வது)

இப்போது மீதமுள்ள மற்ற படிகளுக்கு குவாண்டம் சர்க்யூட்டை உருவாக்குகிறோம், இரண்டாவது மற்றும் மூன்றாவது. முதல் எடுத்துக்காட்டில் கூறியது போல், இந்த படிகளில் கட்ட திருத்தத்தின் கூடுதல் துணை-படி உள்ளது.

மீட்டமைப்புடன் துவக்கம்

[22]:
qc.reset(0)
qc.h(0)
qc.draw('mpl')
[22]:
../../_images/tutorials_textbook_01_IQPE_47_0.png

கட்ட திருத்தம் (படி 2 க்கு)

கட்ட பிட் \(\varphi_{2}\) பிரித்தெடுப்பதற்காக, நாம் ஒரு கணித திருத்தம் செய்கிறோம் \(-\pi\varphi_3/2\).

எனவே, மீட்டமைப்புக்குப் பிறகு நாம் கட்ட கேட்டைப் பயன்படுத்துகிறோம் \(P(\theta)\) கட்டத்துடன் \(\theta=-\pi/2\) கிளாசிக்கல் பிட் நிபந்தனைக்குட்பட்டது \(c_0\) (\(=\varphi_3\)).

[23]:
qc.p(-pi/2,0).c_if(c,1)
qc.draw('mpl')
[23]:
../../_images/tutorials_textbook_01_IQPE_49_0.png

கட்டுப்படுத்தப்பட்ட-\(U\) வாயில்களின் பயன்பாடு மற்றும் x-அளவீடு (படி 2 க்கு)

முதல் படியில் செய்ததைப் போலவே \(CU\) செயல்பாடுகளைப் பயன்படுத்துகிறோம். இரண்டாவது படிக்கு நம்மிடம் உள்ளது \(t=m-2\), எனவே \(2^t=2\). எனவே நாம் \(\text{MCP}(\pi/4)\) \(2\) முறை பயன்படுத்துகிறோம். பின்னர் நாம் qubit \(q_0\) இன் x-அளவைச் செய்கிறோம், கட்ட பிட் \(\varphi_2\) பிட் \(c_1\) இல் சேமிக்கிறோம்.

[24]:
for _ in range(2**(m-2)):
    qc.mcp(pi/4,[0,1],2)
x_measurement(qc, q[0], c[1])
qc.draw('mpl')
[24]:
../../_images/tutorials_textbook_01_IQPE_51_0.png

3 வது படியின் அனைத்து உட்பிரிவுகளும்

3 வது மற்றும் கடைசி படிக்கு, இரண்டாம் கட்டத்தில் செய்ததைப் போல துணை க்யூபிட்டின் மீட்டமைப்பு மற்றும் துவக்கத்தை நாங்கள் செய்கிறோம்.

3வது படியில் நாம் \(-2\pi 0.0\varphi_{2}\varphi_{3}= -2\pi \left(\frac{\varphi_2}{4}+ இன் கட்ட திருத்தத்தை செய்ய வேண்டும் \frac{\varphi_3}{8}\right)=-\frac{\varphi_2\pi}{2}-\frac{ \varphi_3\pi}{4}\), எனவே நாம் 2 நிபந்தனைக்குட்பட்ட கட்ட திருத்தங்களைப் பயன்படுத்த வேண்டும், ஒன்று நிபந்தனைக்குட்பட்டது \(\varphi_3\) (\(=c_0\)) மற்றும் மற்றொன்று \(\varphi_2\)(\(=c_1\)). இதைச் செய்ய, நாம் பின்வருவனவற்றைப் பயன்படுத்த வேண்டும்: - கேட் \(P(-\pi/4)\) நிபந்தனைக்குட்பட்ட \(c_0=1\), அதாவது \(c=001\) (c_if மதிப்பு \(1\)) - கேட் \(P(-\pi/2)\) நிபந்தனைக்குட்பட்டது \(c_1=1\), அதாவது \(c=010 போது கேட் பயன்படுத்தப்படும் \)) - gate \(P(-3\pi/4)\) நிபந்தனைக்குட்பட்ட \(c_1=1\) மற்றும் \(c_0=1\) அதாவது, கேட் பயன்படுத்தப்படும் போது \(c=011\) (c_if மதிப்புகள் \(3\))

அடுத்து, \(CU\) செயல்பாடுகள்: நாங்கள் பயன்படுத்துகிறோம் \(2^t\) மடங்கு: \(\text{MCP}(\pi/4)\) கேட் மற்றும் 3 வது கட்டத்தில் இருந்து \(t=m-3=0\), நாங்கள் ஒரு முறை மட்டுமே கேட்டைப் பயன்படுத்துகிறோம்.

[25]:
# initialization of qubit q0
qc.reset(0)
qc.h(0)

# phase correction
qc.p(-pi/4,0).c_if(c,1)

qc.p(-pi/2,0).c_if(c,2)
qc.p(-3*pi/4,0).c_if(c,3)

# c-U operations
for _ in range(2**(m-3)):
    qc.mcp(pi/4,[0,1],2)

# X measurement
qc.h(0)
qc.measure(0,2)

qc.draw('mpl')
[25]:
../../_images/tutorials_textbook_01_IQPE_53_0.png

இப்போது, சத்தமில்லாமல் சிமுலேட்டருடன் சர்க்யூட்டை இயக்குகிறோம்.

[26]:
count0 = execute(qc, sim).result().get_counts()

key_new = [str(int(key,2)/2**m) for key in list(count0.keys())]
count1 = dict(zip(key_new, count0.values()))

fig, ax = plt.subplots(1,2)
plot_histogram(count0, ax=ax[0])
plot_histogram(count1, ax=ax[1])
fig.tight_layout()

நாங்கள் பெற்றுள்ளோம் \(100\%\) நிகழ்தகவு \(\varphi=0.125\), அதாவது, \(1/8\), எதிர்பார்த்தபடி.

[27]:
import qiskit.tools.jupyter
%qiskit_version_table
%qiskit_copyright
/opt/miniconda3/envs/qiskit/lib/python3.9/site-packages/qiskit/aqua/operators/operator_globals.py:48: DeprecationWarning: `from_label` is deprecated and will be removed no earlier than 3 months after the release date. Use Pauli(label) instead.
  X = make_immutable(PrimitiveOp(Pauli.from_label('X')))

Version Information

Qiskit SoftwareVersion
Qiskit0.24.1
Terra0.17.3
Aer0.7.6
Ignis0.5.2
Aqua0.8.2
IBM Q Provider0.13.1
System information
Python3.9.5 (default, May 18 2021, 12:31:01) [Clang 10.0.0 ]
OSDarwin
CPUs4
Memory (Gb)16.0
Fri Jul 02 06:38:27 2021 EDT

This code is a part of Qiskit

© Copyright IBM 2017, 2021.

This code is licensed under the Apache License, Version 2.0. You may
obtain a copy of this license in the LICENSE.txt file in the root directory
of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.

Any modifications or derivative works of this code must retain this
copyright notice, and modified files need to carry a notice indicating
that they have been altered from the originals.