IBM Quantum Experience와 Blueqat에서 CCX 게이트(토폴리게이트)를 경험해 보세요.
CCX 게이트(토폴리게이트)
$CCX$ 게이트는 3 양자 비트 연산입니다. $CX$게이트의 확장 버전? 같은 느낌으로, 제어 비트가 1개 증가해 2개 있습니다. 토마소 토폴리에 의해 만들어졌기 때문에 토폴리 게이트라고도합니다.
두 개의 제어 비트가 모두 1이 될 때 대상 비트를 반전합니다.
CCX 게이트 준비
Circuit Composer에서 'q' register qubits를 3으로 설정하여 3 양자 비트로 만듭니다. 또한 $CCX$ 게이트를 배치합니다. 관례에 따라 측정 아이콘도 넣어 둡니다.
Measurement Probability의 결과를 보면 000입니다. 아직 아무것도하고 있지 않기 때문에 당연하네요.
CCX 게이트를 사용해보기
q[0]과 q[1]에 $X$ 게이트를 넣어 동작을 확인해 봅니다.
제어 비트 중 하나만 1인 경우
q[0]에 $X$ 게이트를 적용하여 한쪽만 1 상태로 해 봅니다. 당연히 타겟 비트는 반전되지 않고 그대로 출력되며 결과는 001입니다. Circuit Composer에서는 결과는 후→전의 순서로 나오므로, q[0]의 결과가 마지막 1에 해당합니다.
타겟 비트에 $X$ 게이트를 적용해도 그대로 출력되어 결과는 101이 됩니다.
제어 비트가 모두 1인 경우
q[0]과 q[1] 모두에 $X$ 게이트를 적용하면 타겟 비트가 반전됩니다. 지금 q[2]는 원래 0이므로 반전되어 결과는 111이 되었습니다.
q[2]에도 $X$ 게이트를 적용해 두면, 반전되어 결과는 011이 되었습니다.
Blueqat 코드
비슷한 작업을 Blueqat에서 시도합니다.
from blueqat import Circuit
res = []
res.append(Circuit(3).ccx[0,1,2].m[:].run(shots=1)) #000
res.append(Circuit(3).x[2].ccx[0,1,2].m[:].run(shots=1)) #001
res.append(Circuit(3).x[1].ccx[0,1,2].m[:].run(shots=1)) #010
res.append(Circuit(3).x[1,2].ccx[0,1,2].m[:].run(shots=1)) #011
res.append(Circuit(3).x[0].ccx[0,1,2].m[:].run(shots=1)) #100
res.append(Circuit(3).x[0,2].ccx[0,1,2].m[:].run(shots=1)) #101
res.append(Circuit(3).x[0,1].ccx[0,1,2].m[:].run(shots=1)) #110
res.append(Circuit(3).x[:].ccx[0,1,2].m[:].run(shots=1)) #111
for i in res:
print(i)
실행하면 두 개의 제어 비트가 모두 1 일 때 (마지막 110과 111) 대상 비트가 반전된다는 것을 알 수 있습니다. 또한 Blueqat에서는 양자 비트의 순서(q[0], q[1], q[2])로 결과가 나옵니다. Circuit Composer와 반대이므로 주의하십시오.
Counter({'000': 1})
Counter({'001': 1})
Counter({'010': 1})
Counter({'011': 1})
Counter({'100': 1})
Counter({'101': 1})
Counter({'111': 1})
Counter({'110': 1})
참고 자료
Blueqat 튜토리얼 토폴리게이트
Reference
이 문제에 관하여(IBM Quantum Experience와 Blueqat에서 CCX 게이트(토폴리게이트)를 경험해 보세요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/M_Study/items/484b7e8e395d2494421c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Circuit Composer에서 'q' register qubits를 3으로 설정하여 3 양자 비트로 만듭니다. 또한 $CCX$ 게이트를 배치합니다. 관례에 따라 측정 아이콘도 넣어 둡니다.
Measurement Probability의 결과를 보면 000입니다. 아직 아무것도하고 있지 않기 때문에 당연하네요.
CCX 게이트를 사용해보기
q[0]과 q[1]에 $X$ 게이트를 넣어 동작을 확인해 봅니다.
제어 비트 중 하나만 1인 경우
q[0]에 $X$ 게이트를 적용하여 한쪽만 1 상태로 해 봅니다. 당연히 타겟 비트는 반전되지 않고 그대로 출력되며 결과는 001입니다. Circuit Composer에서는 결과는 후→전의 순서로 나오므로, q[0]의 결과가 마지막 1에 해당합니다.
타겟 비트에 $X$ 게이트를 적용해도 그대로 출력되어 결과는 101이 됩니다.
제어 비트가 모두 1인 경우
q[0]과 q[1] 모두에 $X$ 게이트를 적용하면 타겟 비트가 반전됩니다. 지금 q[2]는 원래 0이므로 반전되어 결과는 111이 되었습니다.
q[2]에도 $X$ 게이트를 적용해 두면, 반전되어 결과는 011이 되었습니다.
Blueqat 코드
비슷한 작업을 Blueqat에서 시도합니다.
from blueqat import Circuit
res = []
res.append(Circuit(3).ccx[0,1,2].m[:].run(shots=1)) #000
res.append(Circuit(3).x[2].ccx[0,1,2].m[:].run(shots=1)) #001
res.append(Circuit(3).x[1].ccx[0,1,2].m[:].run(shots=1)) #010
res.append(Circuit(3).x[1,2].ccx[0,1,2].m[:].run(shots=1)) #011
res.append(Circuit(3).x[0].ccx[0,1,2].m[:].run(shots=1)) #100
res.append(Circuit(3).x[0,2].ccx[0,1,2].m[:].run(shots=1)) #101
res.append(Circuit(3).x[0,1].ccx[0,1,2].m[:].run(shots=1)) #110
res.append(Circuit(3).x[:].ccx[0,1,2].m[:].run(shots=1)) #111
for i in res:
print(i)
실행하면 두 개의 제어 비트가 모두 1 일 때 (마지막 110과 111) 대상 비트가 반전된다는 것을 알 수 있습니다. 또한 Blueqat에서는 양자 비트의 순서(q[0], q[1], q[2])로 결과가 나옵니다. Circuit Composer와 반대이므로 주의하십시오.
Counter({'000': 1})
Counter({'001': 1})
Counter({'010': 1})
Counter({'011': 1})
Counter({'100': 1})
Counter({'101': 1})
Counter({'111': 1})
Counter({'110': 1})
참고 자료
Blueqat 튜토리얼 토폴리게이트
Reference
이 문제에 관하여(IBM Quantum Experience와 Blueqat에서 CCX 게이트(토폴리게이트)를 경험해 보세요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/M_Study/items/484b7e8e395d2494421c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
from blueqat import Circuit
res = []
res.append(Circuit(3).ccx[0,1,2].m[:].run(shots=1)) #000
res.append(Circuit(3).x[2].ccx[0,1,2].m[:].run(shots=1)) #001
res.append(Circuit(3).x[1].ccx[0,1,2].m[:].run(shots=1)) #010
res.append(Circuit(3).x[1,2].ccx[0,1,2].m[:].run(shots=1)) #011
res.append(Circuit(3).x[0].ccx[0,1,2].m[:].run(shots=1)) #100
res.append(Circuit(3).x[0,2].ccx[0,1,2].m[:].run(shots=1)) #101
res.append(Circuit(3).x[0,1].ccx[0,1,2].m[:].run(shots=1)) #110
res.append(Circuit(3).x[:].ccx[0,1,2].m[:].run(shots=1)) #111
for i in res:
print(i)
Counter({'000': 1})
Counter({'001': 1})
Counter({'010': 1})
Counter({'011': 1})
Counter({'100': 1})
Counter({'101': 1})
Counter({'111': 1})
Counter({'110': 1})
Blueqat 튜토리얼 토폴리게이트
Reference
이 문제에 관하여(IBM Quantum Experience와 Blueqat에서 CCX 게이트(토폴리게이트)를 경험해 보세요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/M_Study/items/484b7e8e395d2494421c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)