概要
- Cirq の 理解を, さらに深めるため, シュミレートするサンプルをいくつか動かしてみた.
- 動作環境は, Google Colaboratory で行った
感想
- Google社 の Github上 の サンプルプログラムを, いろいろ変えてみて, 量子ビットに対する操作のイメージが, 少しだけ身近なものに感じたと思う.
- 量子物理学に関する知識(用語, 数式の意味ほか)は, 徐々に身につけていく必要があると感じた.
- 時間を見つけて, 今後も, チュートリアルの残りの部分を進めていこうと思う.
Simulation (1量子ビット)
量子回路(1量子ビット)を作成して, シュミレートするサンプル.
- Simulation(Pauli-X Gate) の サンプル
- Simulation(Square root of Pauli-X Gate) の サンプル
- Simulation(Pauli-Y Gate) の サンプル
- Simulation(Pauli-Z Gate) の サンプル
- Simulation(Hadamard Gate) の サンプル
- Simulation(CNOT Gate) の サンプル
- Simulation(X, CNOT Gate) の サンプル
- Simulation(CZ Gate) の サンプル
- Simulation(X, CZ Gate) の サンプル
- Simulation(X, SWAP Gate) の サンプル
- Simulation(CCNOT Gate) の サンプル
- Simulation(X, CCNOT Gate) の サンプル
- Simulation(X, X, CCNOT Gate) の サンプル
- Simulation(X, CSWAP Gate) の サンプル
- Simulation(X, X, CSWAP Gate) の サンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
[編集内容(Simulation(Pauli-X Gate))] # Creates and simulates a simple circuit # https://github.com/quantumlib/Cirq/blob/master/examples/hello_qubit.py # ->一部改変. """Creates and simulates a simple circuit. === EXAMPLE OUTPUT === Circuit: (0, 0): ───X───M('m')─── Results: m=1111111111 """ # 以下のように理解. # 1. ↑(1量子ビット, 0 と見る) を 用意. # 2. Pauli-X ゲート を 操作. # 3. 測定結果(10回)が, すべて ↓ となった. import cirq def main(): # Pick a qubit. qubit = cirq.GridQubit(0, 0) # Create a circuit circuit = cirq.Circuit( cirq.X(qubit), cirq.measure(qubit, key='m') # Pauli-X Gate. # Measurement. ) print("Circuit:") print(circuit) # Simulate the circuit several times. simulator = cirq.Simulator() result = simulator.run(circuit, repetitions=10) print("Results:") print(result) if __name__ == '__main__': main() |
1 2 3 4 5 |
[出力結果] Circuit: (0, 0): ───X───M('m')─── Results: m=1111111111 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
[編集内容(Simulation(Square root of Pauli-X Gate))] # Creates and simulates a simple circuit # https://github.com/quantumlib/Cirq/blob/master/examples/hello_qubit.py # ->一部改変. """Creates and simulates a simple circuit. === EXAMPLE OUTPUT === Circuit: (0, 0): ───X^0.5───M('m')─── Results: m=1110001000 """ # 以下のように理解. # 1. ↑(1量子ビット, 0 と見る) を 用意. # 2. Pauli-X ゲート を 操作. # 3. 測定結果(10回)が, ↓↓↓↑↑↑↓↑↑↑ となった. import cirq def main(): # Pick a qubit. qubit = cirq.GridQubit(0, 0) # Create a circuit circuit = cirq.Circuit( cirq.X(qubit) ** 0.5, cirq.measure(qubit, key='m') # Square root of Pauli-X Gate. # Measurement. ) print("Circuit:") print(circuit) # Simulate the circuit several times. simulator = cirq.Simulator() result = simulator.run(circuit, repetitions=10) print("Results:") print(result) if __name__ == '__main__': main() |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
[出力結果] 測定を繰り返すと, 出力結果 も 変化. ※1回目. Circuit: (0, 0): ───X^0.5───M('m')─── Results: m=1011100101 ※2回目. Circuit: (0, 0): ───X^0.5───M('m')─── Results: m=1000010101 ※3回目. Circuit: (0, 0): ───X^0.5───M('m')─── Results: m=1110001000 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
[編集内容(Simulation(Pauli-Y Gate))] # Creates and simulates a simple circuit # https://github.com/quantumlib/Cirq/blob/master/examples/hello_qubit.py # ->一部改変. """Creates and simulates a simple circuit. === EXAMPLE OUTPUT === Circuit: (0, 0): ───Y───M('m')─── Results: m=1111111111 """ # 以下のように理解. # 1. ↑(1量子ビット, 0 と見る) を 用意. # 2. Pauli-Y ゲート を 操作. # 3. 測定結果(10回)が, すべて ↓ となった. import cirq def main(): # Pick a qubit. qubit = cirq.GridQubit(0, 0) # Create a circuit circuit = cirq.Circuit( cirq.Y(qubit), cirq.measure(qubit, key='m') # Pauli-Y Gate. # Measurement. ) print("Circuit:") print(circuit) # Simulate the circuit several times. simulator = cirq.Simulator() result = simulator.run(circuit, repetitions=10) print("Results:") print(result) if __name__ == '__main__': main() |
1 2 3 4 5 |
[出力結果] Circuit: (0, 0): ───Y───M('m')─── Results: m=1111111111 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
[編集内容(Simulation(Pauli-Z Gate))] # Creates and simulates a simple circuit # https://github.com/quantumlib/Cirq/blob/master/examples/hello_qubit.py # ->一部改変. """Creates and simulates a simple circuit. === EXAMPLE OUTPUT === Circuit: (0, 0): ───Z───M('m')─── Results: m=0000000000 """ # 以下のように理解. # 1. ↑(1量子ビット, 0 と見る) を 用意. # 2. Pauli-Z ゲート を 操作. # 3. 測定結果(10回)が, すべて ↑ となった. import cirq def main(): # Pick a qubit. qubit = cirq.GridQubit(0, 0) # Create a circuit circuit = cirq.Circuit( cirq.Z(qubit), cirq.measure(qubit, key='m') # Pauli-Z Gate. # Measurement. ) print("Circuit:") print(circuit) # Simulate the circuit several times. simulator = cirq.Simulator() result = simulator.run(circuit, repetitions=10) print("Results:") print(result) if __name__ == '__main__': main() |
1 2 3 4 5 |
[出力結果] Circuit: (0, 0): ───Z───M('m')─── Results: m=0000000000 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
[編集内容(Simulation(Hadamard Gate))] # Creates and simulates a simple circuit # https://github.com/quantumlib/Cirq/blob/master/examples/hello_qubit.py # ->一部改変. """Creates and simulates a simple circuit. === EXAMPLE OUTPUT === Circuit: (0, 0): ───H───M('m')─── Results: m=1111010011 """ # 以下のように理解. # 1. ↑(1量子ビット, 0 と見る) を 用意. # 2. H ゲート を 操作. # 3. 測定結果(10回)が, ↓↓↓↓↑↓↑↑↓↓ となった. import cirq def main(): # Pick a qubit. qubit = cirq.GridQubit(0, 0) # Create a circuit circuit = cirq.Circuit( cirq.H(qubit), cirq.measure(qubit, key='m') # Hadamard Gate. # Measurement. ) print("Circuit:") print(circuit) # Simulate the circuit several times. simulator = cirq.Simulator() result = simulator.run(circuit, repetitions=10) print("Results:") print(result) if __name__ == '__main__': main() |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
[出力結果] 測定を繰り返すと, 出力結果 も 変化. ※1回目. Circuit: (0, 0): ───H───M('m')─── Results: m=1111010011 ※2回目. Circuit: (0, 0): ───H───M('m')─── Results: m=0001100110 ※3回目. Circuit: (0, 0): ───H───M('m')─── Results: m=1111100000 |
Simulation (2量子ビット)
量子回路(2量子ビット)を作成して, シュミレートするサンプル.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
[編集内容(Simulation(CNOT Gate))] # Creates and simulates a simple circuit # https://github.com/quantumlib/Cirq/blob/master/examples/hello_qubit.py # ->一部改変. """Creates and simulates a simple circuit. === EXAMPLE OUTPUT === Circuit: (0, 0): ───@───M('m')─── │ │ (1, 0): ───X───M──────── Results: m=0000000000, 0000000000 """ # 以下のように理解. # 1. ↑↑(2量子ビット, 00 と見る) を 用意. # 2. CNOT ゲート を 操作. # 3. 測定結果(10回)が, それぞれ, 以下のようになった. # 1量子ビット目: ↑↑↑↑↑↑↑↑↑↑ # 2量子ビット目: ↑↑↑↑↑↑↑↑↑↑ import cirq def main(): # Pick two qubits. q0 = cirq.GridQubit(0, 0) q1 = cirq.GridQubit(1, 0) # Create a circuit circuit = cirq.Circuit( cirq.CNOT(q0, q1), cirq.measure(q0, q1, key='m') # CNOT Gate. # Measurement. ) print("Circuit:") print(circuit) # Simulate the circuit several times. simulator = cirq.Simulator() result = simulator.run(circuit, repetitions=10) print("Results:") print(result) if __name__ == '__main__': main() |
1 2 3 4 5 6 7 |
[出力結果] Circuit: (0, 0): ───@───M('m')─── │ │ (1, 0): ───X───M──────── Results: m=0000000000, 0000000000 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
[編集内容(Simulation(X, CNOT Gate))] # Creates and simulates a simple circuit # https://github.com/quantumlib/Cirq/blob/master/examples/hello_qubit.py # ->一部改変. """Creates and simulates a simple circuit. === EXAMPLE OUTPUT === Circuit: (0, 0): ───X───@───M('m')─── │ │ (1, 0): ───────X───M──────── Results: m=1111111111, 1111111111 """ # 以下のように理解. # 1. ↑↑(2量子ビット, 00 と見る) を 用意. # 2. 1量子ビット目に, X ゲート を 操作. # ※ 1量子ビット目が, ↓ に 変わるはず. # 3. 両方の量子ビットに, CNOT ゲート を 操作. # ※ 2量子ビット目が, ↓ に 変わるはず. # 4. 測定結果(10回)が, それぞれ, 以下のようになった. # 1量子ビット目: ↓↓↓↓↓↓↓↓↓↓ # 2量子ビット目: ↓↓↓↓↓↓↓↓↓↓ import cirq def main(): # Pick two qubits. q0 = cirq.GridQubit(0, 0) q1 = cirq.GridQubit(1, 0) # X, CNOT Operations. op_1 = cirq.X(q0) op_2 = cirq.CNOT(q0, q1) # Create a circuit circuit = cirq.Circuit() circuit.append(op_1) circuit.append(op_2) circuit.append(cirq.measure(q0, q1, key='m')) print("Circuit:") print(circuit) # Simulate the circuit several times. simulator = cirq.Simulator() result = simulator.run(circuit, repetitions=10) print("Results:") print(result) if __name__ == '__main__': main() |
1 2 3 4 5 6 7 |
[出力結果] Circuit: (0, 0): ───X───@───M('m')─── │ │ (1, 0): ───────X───M──────── Results: m=1111111111, 1111111111 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
[編集内容(Simulation(CZ Gate))] # Creates and simulates a simple circuit # https://github.com/quantumlib/Cirq/blob/master/examples/hello_qubit.py # ->一部改変. """Creates and simulates a simple circuit. === EXAMPLE OUTPUT === Circuit: (0, 0): ───@───M('m')─── │ │ (1, 0): ───@───M──────── Results: m=0000000000, 0000000000 """ # 以下のように理解. # 1. ↑↑(2量子ビット, 00 と見る) を 用意. # 2. CZ ゲート を 操作. # 3. 測定結果(10回)が, それぞれ, 以下のようになった. # 1量子ビット目: ↑↑↑↑↑↑↑↑↑↑ # 2量子ビット目: ↑↑↑↑↑↑↑↑↑↑ import cirq def main(): # Pick two qubits. q0 = cirq.GridQubit(0, 0) q1 = cirq.GridQubit(1, 0) # Create a circuit circuit = cirq.Circuit( cirq.CZ(q0, q1), cirq.measure(q0, q1, key='m') # CZ Gate. # Measurement. ) print("Circuit:") print(circuit) # Simulate the circuit several times. simulator = cirq.Simulator() result = simulator.run(circuit, repetitions=10) print("Results:") print(result) if __name__ == '__main__': main() |
1 2 3 4 5 6 7 |
[出力結果] Circuit: (0, 0): ───@───M('m')─── │ │ (1, 0): ───@───M──────── Results: m=0000000000, 0000000000 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
[編集内容(Simulation(X, CZ Gate))] # Creates and simulates a simple circuit # https://github.com/quantumlib/Cirq/blob/master/examples/hello_qubit.py # ->一部改変. """Creates and simulates a simple circuit. Circuit: (0, 0): ───X───@───M('m')─── │ │ (1, 0): ───────@───M──────── Results: m=1111111111, 0000000000 """ # 以下のように理解. # 1. ↑↑(2量子ビット, 00 と見る) を 用意. # 2. 1量子ビット目に, X ゲート を 操作. # ※ 1量子ビット目が, ↓ に 変わるはず. # 3. 両方の量子ビットに, CZ ゲート を 操作. # ※ 2量子ビット目は, 変化しないはず. # 4. 測定結果(10回)が, それぞれ, 以下のようになった. # 1量子ビット目: ↓↓↓↓↓↓↓↓↓↓ # 2量子ビット目: ↑↑↑↑↑↑↑↑↑↑ import cirq def main(): # Pick two qubits. q0 = cirq.GridQubit(0, 0) q1 = cirq.GridQubit(1, 0) # X, CZ Operations. op_1 = cirq.X(q0) op_2 = cirq.CZ(q0, q1) # Create a circuit circuit = cirq.Circuit() circuit.append(op_1) circuit.append(op_2) circuit.append(cirq.measure(q0, q1, key='m')) print("Circuit:") print(circuit) # Simulate the circuit several times. simulator = cirq.Simulator() result = simulator.run(circuit, repetitions=10) print("Results:") print(result) if __name__ == '__main__': main() |
1 2 3 4 5 6 7 |
[出力結果] Circuit: (0, 0): ───X───@───M('m')─── │ │ (1, 0): ───────@───M──────── Results: m=1111111111, 0000000000 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
[編集内容(Simulation(X, SWAP Gate))] # Creates and simulates a simple circuit # https://github.com/quantumlib/Cirq/blob/master/examples/hello_qubit.py # ->一部改変. """Creates and simulates a simple circuit. Circuit: (0, 0): ───X───×───M('m')─── │ │ (1, 0): ───────×───M──────── Results: m=0000000000, 1111111111 """ # 以下のように理解. # 1. ↑↑(2量子ビット, 00 と見る) を 用意. # 2. 1量子ビット目に, X ゲート を 操作. # ※ 1量子ビット目が, ↓ に 変わるはず. # 3. 両方の量子ビットに, SWAP ゲート を 操作. # ※ 1量子ビット, 2量子ビットが入れ替わるはず. # 4. 測定結果(10回)が, それぞれ, 以下のようになった. # 1量子ビット目: ↑↑↑↑↑↑↑↑↑↑ # 2量子ビット目: ↓↓↓↓↓↓↓↓↓↓ import cirq def main(): # Pick two qubits. q0 = cirq.GridQubit(0, 0) q1 = cirq.GridQubit(1, 0) # X, SWAP Operations. op_1 = cirq.X(q0) op_2 = cirq.SWAP(q0, q1) # Create a circuit circuit = cirq.Circuit() circuit.append(op_1) circuit.append(op_2) circuit.append(cirq.measure(q0, q1, key='m')) print("Circuit:") print(circuit) # Simulate the circuit several times. simulator = cirq.Simulator() result = simulator.run(circuit, repetitions=10) print("Results:") print(result) if __name__ == '__main__': main() |
1 2 3 4 5 6 7 |
[出力結果] Circuit: (0, 0): ───X───×───M('m')─── │ │ (1, 0): ───────×───M──────── Results: m=0000000000, 1111111111 |
Simulation (3量子ビット)
量子回路(3量子ビット)を作成して, シュミレートするサンプル.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
[編集内容(Simulation(CCNOT Gate))] # Creates and simulates a simple circuit # https://github.com/quantumlib/Cirq/blob/master/examples/hello_qubit.py # ->一部改変. """Creates and simulates a simple circuit. === EXAMPLE OUTPUT === Circuit: (0, 0): ───@───M('m')─── │ │ (1, 0): ───@───M──────── │ │ (2, 0): ───X───M──────── Results: m=0000000000, 0000000000, 0000000000 """ # 以下のように理解. # 1. ↑↑↑(3量子ビット, 000 と見る) を 用意. # 2. CCNOT ゲート を 操作. # 3. 測定結果(10回)が, それぞれ, 以下のようになった. # 1量子ビット目: ↑↑↑↑↑↑↑↑↑↑ # 2量子ビット目: ↑↑↑↑↑↑↑↑↑↑ # 3量子ビット目: ↑↑↑↑↑↑↑↑↑↑ import cirq def main(): # Pick three qubits. q0 = cirq.GridQubit(0, 0) q1 = cirq.GridQubit(1, 0) q2 = cirq.GridQubit(2, 0) # Create a circuit circuit = cirq.Circuit( cirq.CCNOT(q0, q1, q2), cirq.measure(q0, q1, q2, key='m') # CCNOT Gate. # Measurement. ) print("Circuit:") print(circuit) # Simulate the circuit several times. simulator = cirq.Simulator() result = simulator.run(circuit, repetitions=10) print("Results:") print(result) if __name__ == '__main__': main() |
1 2 3 4 5 6 7 8 9 |
[出力結果] Circuit: (0, 0): ───@───M('m')─── │ │ (1, 0): ───@───M──────── │ │ (2, 0): ───X───M──────── Results: m=0000000000, 0000000000, 0000000000 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
[編集内容(Simulation(X, CCNOT Gate))] # Creates and simulates a simple circuit # https://github.com/quantumlib/Cirq/blob/master/examples/hello_qubit.py # ->一部改変. """Creates and simulates a simple circuit. === EXAMPLE OUTPUT === Circuit: (0, 0): ───X───@───M('m')─── │ │ (1, 0): ───────@───M──────── │ │ (2, 0): ───────X───M──────── Results: m=1111111111, 0000000000, 0000000000 """ # 以下のように理解. # 1. ↑↑↑(3量子ビット, 000 と見る) を 用意. # 2. 1量子ビット目に, X ゲート を 操作. # ※ 1量子ビット目が, ↓ に 変わるはず. # 3. すべての量子ビットに, CCNOT ゲート を 操作. # 4. 測定結果(10回)が, それぞれ, 以下のようになった. # 1量子ビット目: ↓↓↓↓↓↓↓↓↓↓ # 2量子ビット目: ↑↑↑↑↑↑↑↑↑↑ # 3量子ビット目: ↑↑↑↑↑↑↑↑↑↑ import cirq def main(): # Pick three qubits. q0 = cirq.GridQubit(0, 0) q1 = cirq.GridQubit(1, 0) q2 = cirq.GridQubit(2, 0) # X, CCNOT Operations. op_1 = cirq.X(q0) op_2 = cirq.CCNOT(q0, q1, q2) # Create a circuit circuit = cirq.Circuit() circuit.append(op_1) circuit.append(op_2) circuit.append(cirq.measure(q0, q1, q2, key='m')) print("Circuit:") print(circuit) # Simulate the circuit several times. simulator = cirq.Simulator() result = simulator.run(circuit, repetitions=10) print("Results:") print(result) if __name__ == '__main__': main() |
1 2 3 4 5 6 7 8 9 |
[出力結果] Circuit: (0, 0): ───X───@───M('m')─── │ │ (1, 0): ───────@───M──────── │ │ (2, 0): ───────X───M──────── Results: m=1111111111, 0000000000, 0000000000 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
[編集内容(Simulation(X, X, CCNOT Gate))] # Creates and simulates a simple circuit # https://github.com/quantumlib/Cirq/blob/master/examples/hello_qubit.py # ->一部改変. """Creates and simulates a simple circuit. === EXAMPLE OUTPUT === Circuit: (0, 0): ───X───@───M('m')─── │ │ (1, 0): ───X───@───M──────── │ │ (2, 0): ───────X───M──────── Results: m=1111111111, 1111111111, 1111111111 """ # 以下のように理解. # 1. ↑↑↑(3量子ビット, 000 と見る) を 用意. # 2. 1量子ビット目に, X ゲート を 操作. # ※ 1量子ビット目が, ↓ に 変わるはず. # 3. 2量子ビット目に, X ゲート を 操作. # ※ 2量子ビット目が, ↓ に 変わるはず. # 4. すべての量子ビットに, CCNOT ゲート を 操作. # ※ 3量子ビット目が, ↓ に 変わるはず(制御ビット(1量子ビット目, 2量子ビット目)が, いずれも 1 なので). # 5. 測定結果(10回)が, それぞれ, 以下のようになった. # 1量子ビット目: ↓↓↓↓↓↓↓↓↓↓ # 2量子ビット目: ↓↓↓↓↓↓↓↓↓↓ # 3量子ビット目: ↓↓↓↓↓↓↓↓↓↓ import cirq def main(): # Pick three qubits. q0 = cirq.GridQubit(0, 0) q1 = cirq.GridQubit(1, 0) q2 = cirq.GridQubit(2, 0) # X, X, CCNOT Operations. op_1 = cirq.X(q0) op_2 = cirq.X(q1) op_3 = cirq.CCNOT(q0, q1, q2) # Create a circuit circuit = cirq.Circuit() circuit.append(op_1) circuit.append(op_2) circuit.append(op_3) circuit.append(cirq.measure(q0, q1, q2, key='m')) print("Circuit:") print(circuit) # Simulate the circuit several times. simulator = cirq.Simulator() result = simulator.run(circuit, repetitions=10) print("Results:") print(result) if __name__ == '__main__': main() |
1 2 3 4 5 6 7 8 9 |
[出力結果] Circuit: (0, 0): ───X───@───M('m')─── │ │ (1, 0): ───X───@───M──────── │ │ (2, 0): ───────X───M──────── Results: m=1111111111, 1111111111, 1111111111 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
[編集内容(Simulation(X, CSWAP Gate))] # Creates and simulates a simple circuit # https://github.com/quantumlib/Cirq/blob/master/examples/hello_qubit.py # ->一部改変. """Creates and simulates a simple circuit. === EXAMPLE OUTPUT === Circuit: (0, 0): ───X───@───M('m')─── │ │ (1, 0): ───────×───M──────── │ │ (2, 0): ───────×───M──────── Results: m=1111111111, 0000000000, 0000000000 """ # 以下のように理解. # 1. ↑↑↑(3量子ビット, 000 と見る) を 用意. # 2. 1量子ビット目に, X ゲート を 操作. # ※ 1量子ビット目が, ↓ に 変わるはず. # 3. すべての量子ビットに, CSWAP ゲート を 操作. # 4. 測定結果(10回)が, それぞれ, 以下のようになった. # 1量子ビット目: ↓↓↓↓↓↓↓↓↓↓ # 2量子ビット目: ↑↑↑↑↑↑↑↑↑↑ # 3量子ビット目: ↑↑↑↑↑↑↑↑↑↑ import cirq def main(): # Pick three qubits. q0 = cirq.GridQubit(0, 0) q1 = cirq.GridQubit(1, 0) q2 = cirq.GridQubit(2, 0) # X, CSWAP Operations. op_1 = cirq.X(q0) op_2 = cirq.CSWAP(q0, q1, q2) # Create a circuit circuit = cirq.Circuit() circuit.append(op_1) circuit.append(op_2) circuit.append(cirq.measure(q0, q1, q2, key='m')) print("Circuit:") print(circuit) # Simulate the circuit several times. simulator = cirq.Simulator() result = simulator.run(circuit, repetitions=10) print("Results:") print(result) if __name__ == '__main__': main() |
1 2 3 4 5 6 7 8 |
Circuit: (0, 0): ───X───@───M('m')─── │ │ (1, 0): ───────×───M──────── │ │ (2, 0): ───────×───M──────── Results: m=1111111111, 0000000000, 0000000000 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
[編集内容(Simulation(X, X, CSWAP Gate))] # Creates and simulates a simple circuit # https://github.com/quantumlib/Cirq/blob/master/examples/hello_qubit.py # ->一部改変. """Creates and simulates a simple circuit. === EXAMPLE OUTPUT === Circuit: (0, 0): ───X───@───M('m')─── │ │ (1, 0): ───X───×───M──────── │ │ (2, 0): ───────×───M──────── Results: m=1111111111, 0000000000, 1111111111 """ # 以下のように理解. # 1. ↑↑↑(3量子ビット, 000 と見る) を 用意. # 2. 1量子ビット目に, X ゲート を 操作. # ※ 1量子ビット目が, ↓ に 変わるはず. # 3. 2量子ビット目に, X ゲート を 操作. # ※ 2量子ビット目が, ↓ に 変わるはず. # 4. すべての量子ビットに, CSWAP ゲート を 操作. # ※ 3量子ビット目, 3量子ビット目が, 入れ替わるはず(制御ビット(1量子ビット目, 2量子ビット目)が, いずれも 1 なので). # 5. 測定結果(10回)が, それぞれ, 以下のようになった. # 1量子ビット目: ↓↓↓↓↓↓↓↓↓↓ # 2量子ビット目: ↑↑↑↑↑↑↑↑↑↑ # 3量子ビット目: ↓↓↓↓↓↓↓↓↓↓ import cirq def main(): # Pick three qubits. q0 = cirq.GridQubit(0, 0) q1 = cirq.GridQubit(1, 0) q2 = cirq.GridQubit(2, 0) # X, X, CSWAP Operations. op_1 = cirq.X(q0) op_2 = cirq.X(q1) op_3 = cirq.CSWAP(q0, q1, q2) # Create a circuit circuit = cirq.Circuit() circuit.append(op_1) circuit.append(op_2) circuit.append(op_3) circuit.append(cirq.measure(q0, q1, q2, key='m')) print("Circuit:") print(circuit) # Simulate the circuit several times. simulator = cirq.Simulator() result = simulator.run(circuit, repetitions=10) print("Results:") print(result) if __name__ == '__main__': main() |
1 2 3 4 5 6 7 8 9 |
[出力結果] Circuit: (0, 0): ───X───@───M('m')─── │ │ (1, 0): ───X───×───M──────── │ │ (2, 0): ───────×───M──────── Results: m=1111111111, 0000000000, 1111111111 |