概要
- Qiskit について, サンプルプログラムを動かしてみた.
- 動作環境は, Google Colaboratory で行った
- 実行プログラム, 解説は, 下記の参照サイトをご覧ください
感想
- 本家のサイトが詳しいので, 今後も, どのような機能が利用できるかを, 時間を見つけて, 進めていこうと思う.
Algebraic operations and predicates
- to_matrix_op etc
- StateFn etc
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 |
[編集内容(to_matrix_op etc)] from qiskit.aqua.operators import (StateFn, Zero, One, Plus, Minus, X, H, DictStateFn, VectorStateFn, CircuitStateFn, OperatorStateFn) # to_matrix_op print((Plus ^ 2).to_matrix_op()) print((Minus ^ 2).to_matrix_op()) print((Plus ^ Plus).to_matrix_op()) # equal to Plus ^ 2 print((Plus ^ Minus).to_matrix_op()) print((Minus ^ Plus).to_matrix_op()) print((Minus ^ Minus).to_matrix_op()) # equal to Minus ^ 2 # to_circuit_op print((Plus ^ 2).to_circuit_op()) print((Minus ^ 2).to_circuit_op()) print((Plus ^ Plus).to_circuit_op()) # equal to Plus ^ 2 print((Plus ^ Minus).to_circuit_op()) print((Minus ^ Plus).to_circuit_op()) print((Minus ^ Minus).to_circuit_op()) # equal to Minus ^ 2 # sample print((Plus ^ 2).to_matrix_op().sample()) print((Minus ^ 2).to_matrix_op().sample()) print((Plus ^ Plus).to_matrix_op().sample()) print((Plus ^ Minus).to_matrix_op().sample()) print((Minus ^ Plus).to_matrix_op().sample()) print((Minus ^ Minus).to_matrix_op().sample()) |
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 58 59 60 61 62 63 |
[出力結果] VectorStateFn(Statevector([0.5+0.j, 0.5+0.j, 0.5+0.j, 0.5+0.j], dims=(2, 2))) VectorStateFn(Statevector([ 0.5-1.22e-16j, -0.5+1.22e-16j, -0.5+1.22e-16j, 0.5-1.22e-16j], dims=(2, 2))) VectorStateFn(Statevector([0.5+0.j, 0.5+0.j, 0.5+0.j, 0.5+0.j], dims=(2, 2))) VectorStateFn(Statevector([ 0.5-6.1e-17j, -0.5+6.1e-17j, 0.5-6.1e-17j, -0.5+6.1e-17j], dims=(2, 2))) VectorStateFn(Statevector([ 0.5-6.1e-17j, 0.5-6.1e-17j, -0.5+6.1e-17j, -0.5+6.1e-17j], dims=(2, 2))) VectorStateFn(Statevector([ 0.5-1.22e-16j, -0.5+1.22e-16j, -0.5+1.22e-16j, 0.5-1.22e-16j], dims=(2, 2))) CircuitStateFn( ┌───┐ q_0: ┤ H ├ ├───┤ q_1: ┤ H ├ └───┘ ) CircuitStateFn( ┌───┐┌───┐ q_0: ┤ X ├┤ H ├ ├───┤├───┤ q_1: ┤ X ├┤ H ├ └───┘└───┘ ) CircuitStateFn( ┌───┐ q_0: ┤ H ├ ├───┤ q_1: ┤ H ├ └───┘ ) CircuitStateFn( ┌───┐┌───┐ q_0: ┤ X ├┤ H ├ ├───┤└───┘ q_1: ┤ H ├───── └───┘ ) CircuitStateFn( ┌───┐ q_0: ┤ H ├───── ├───┤┌───┐ q_1: ┤ X ├┤ H ├ └───┘└───┘ ) CircuitStateFn( ┌───┐┌───┐ q_0: ┤ X ├┤ H ├ ├───┤├───┤ q_1: ┤ X ├┤ H ├ └───┘└───┘ ) {'00': 0.263671875, '01': 0.259765625, '11': 0.248046875, '10': 0.228515625} {'10': 0.2734375, '00': 0.26953125, '01': 0.236328125, '11': 0.220703125} {'11': 0.259765625, '01': 0.2568359375, '10': 0.2451171875, '00': 0.23828125} {'00': 0.259765625, '11': 0.2587890625, '10': 0.248046875, '01': 0.2333984375} {'11': 0.259765625, '10': 0.2509765625, '01': 0.2470703125, '00': 0.2421875} {'01': 0.2822265625, '11': 0.24609375, '00': 0.2373046875, '10': 0.234375} |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[編集内容(StateFn etc)] from qiskit.aqua.operators import (StateFn, Zero, One, Plus, Minus, X, H, DictStateFn, VectorStateFn, CircuitStateFn, OperatorStateFn) from qiskit.circuit.library import RealAmplitudes # StateFn print(StateFn({'0' : 1})) print(StateFn({'1' : 1})) print(StateFn({'0' : 1}) == Zero) print(StateFn({'0' : 0}) == Zero) print(StateFn({'1' : 1}) == Zero) print(StateFn({'1' : 0}) == Zero) print(StateFn({'0' : 0}) == One) print(StateFn({'0' : 1}) == One) print(StateFn({'1' : 0}) == One) print(StateFn({'1' : 1}) == One) print(StateFn([0, 1, 1, 0])) print(StateFn([1, 0, 0, 1])) # RealAmplitudes print(StateFn(RealAmplitudes(1))) print(StateFn(RealAmplitudes(2))) print(StateFn(RealAmplitudes(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 |
[出力結果] DictStateFn({'0': 1}) DictStateFn({'1': 1}) True False False False False False False True VectorStateFn(Statevector([0.+0.j, 1.+0.j, 1.+0.j, 0.+0.j], dims=(2, 2))) VectorStateFn(Statevector([1.+0.j, 0.+0.j, 0.+0.j, 1.+0.j], dims=(2, 2))) CircuitStateFn( ┌──────────┐┌──────────┐┌──────────┐┌──────────┐ q_0: ┤ RY(θ[0]) ├┤ RY(θ[1]) ├┤ RY(θ[2]) ├┤ RY(θ[3]) ├ └──────────┘└──────────┘└──────────┘└──────────┘ ) CircuitStateFn( ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ q_0: ┤ RY(θ[0]) ├──■──┤ RY(θ[2]) ├──■──┤ RY(θ[4]) ├──■──┤ RY(θ[6]) ├ ├──────────┤┌─┴─┐├──────────┤┌─┴─┐├──────────┤┌─┴─┐├──────────┤ q_1: ┤ RY(θ[1]) ├┤ X ├┤ RY(θ[3]) ├┤ X ├┤ RY(θ[5]) ├┤ X ├┤ RY(θ[7]) ├ └──────────┘└───┘└──────────┘└───┘└──────────┘└───┘└──────────┘ ) CircuitStateFn( ┌──────────┐ ┌──────────┐ ┌──────────┐» q_0: ┤ RY(θ[0]) ├──■────■──┤ RY(θ[3]) ├──────────────■────■──┤ RY(θ[6]) ├» ├──────────┤┌─┴─┐ │ └──────────┘┌──────────┐┌─┴─┐ │ └──────────┘» q_1: ┤ RY(θ[1]) ├┤ X ├──┼───────■──────┤ RY(θ[4]) ├┤ X ├──┼───────■──────» ├──────────┤└───┘┌─┴─┐ ┌─┴─┐ ├──────────┤└───┘┌─┴─┐ ┌─┴─┐ » q_2: ┤ RY(θ[2]) ├─────┤ X ├───┤ X ├────┤ RY(θ[5]) ├─────┤ X ├───┤ X ├────» └──────────┘ └───┘ └───┘ └──────────┘ └───┘ └───┘ » « ┌──────────┐ «q_0: ──────────────■────■──┤ RY(θ[9]) ├───────────── « ┌──────────┐┌─┴─┐ │ └──────────┘┌───────────┐ «q_1: ┤ RY(θ[7]) ├┤ X ├──┼───────■──────┤ RY(θ[10]) ├ « ├──────────┤└───┘┌─┴─┐ ┌─┴─┐ ├───────────┤ «q_2: ┤ RY(θ[8]) ├─────┤ X ├───┤ X ├────┤ RY(θ[11]) ├ « └──────────┘ └───┘ └───┘ └───────────┘ ) |
PrimitiveOps
- Pauli Gates
- CX Gates etc
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 |
[編集内容(Pauli Gates)] from qiskit.aqua.operators import X, Y, Z, I, CX, T, H, S, PrimitiveOp # Pauli I. I print(I.eval('0'), I.eval('1')) print(I.eval('0').eval('0')) # (1, 1)成分. print(I.eval('0').eval('1')) # (1, 2)成分. print(I.eval('1').eval('0')) # (2, 1)成分. print(I.eval('1').eval('1')) # (2, 2)成分. # Pauli X. X print(X.eval('0'), X.eval('1')) print(X.eval('0').eval('0')) # (1, 1)成分. print(X.eval('0').eval('1')) # (1, 2)成分. print(X.eval('1').eval('0')) # (2, 1)成分. print(X.eval('1').eval('1')) # (2, 2)成分. # Pauli Y. Y print(Y.eval('0'), Y.eval('1')) print(Y.eval('0').eval('0')) # (1, 1)成分. print(Y.eval('0').eval('1')) # (1, 2)成分. print(Y.eval('1').eval('0')) # (2, 1)成分. print(Y.eval('1').eval('1')) # (2, 2)成分. # Pauli Z. Z print(Z.eval('0'), Z.eval('1')) print(Z.eval('0').eval('0')) # (1, 1)成分. print(Z.eval('0').eval('1')) # (1, 2)成分. print(Z.eval('1').eval('0')) # (2, 1)成分. print(Z.eval('1').eval('1')) # (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 |
[出力結果] PauliOp(Pauli('I'), coeff=1.0) DictStateFn({'0': (1+0j)}) DictStateFn({'1': (1+0j)}) (1+0j) 0j 0j (1+0j) PauliOp(Pauli('X'), coeff=1.0) DictStateFn({'1': (1+0j)}) DictStateFn({'0': (1+0j)}) 0j (1+0j) (1+0j) 0j PauliOp(Pauli('Y'), coeff=1.0) DictStateFn({'1': 1j}) DictStateFn({'0': -1j}) 0j 1j -1j 0j PauliOp(Pauli('Z'), coeff=1.0) DictStateFn({'0': (1+0j)}) DictStateFn({'1': (-1+0j)}) (1+0j) 0j 0j (-1+0j) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
[編集内容(Pauli Gates)] [編集内容(CX Gates etc)] from qiskit.aqua.operators import X, Y, Z, I, CX, CZ, T, H, S, PrimitiveOp # CX. CX print(CX.eval('00'), CX.eval('01'), CX.eval('10'), CX.eval('11')) print(CX.eval('00').eval('00'), CX.eval('00').eval('01'), CX.eval('00').eval('10'), CX.eval('00').eval('11')) # (1, 1) - (4, 1)成分. print(CX.eval('01').eval('00'), CX.eval('01').eval('01'), CX.eval('01').eval('10'), CX.eval('01').eval('11')) # (1, 2) - (4, 2)成分. print(CX.eval('10').eval('00'), CX.eval('10').eval('01'), CX.eval('10').eval('10'), CX.eval('10').eval('11')) # (1, 3) - (4, 3)成分. print(CX.eval('11').eval('00'), CX.eval('11').eval('01'), CX.eval('11').eval('10'), CX.eval('11').eval('11')) # (1, 4) - (4, 4)成分. print(CX) print(CX.to_matrix().real) # X ^ Z. XZ = X ^ Z XZ print(XZ.eval('00'), XZ.eval('01'), XZ.eval('10'), XZ.eval('11')) print(XZ.eval('00').eval('00'), XZ.eval('00').eval('01'), XZ.eval('00').eval('10'), XZ.eval('00').eval('11')) # (1, 1) - (4, 1)成分. print(XZ.eval('01').eval('00'), XZ.eval('01').eval('01'), XZ.eval('01').eval('10'), XZ.eval('01').eval('11')) # (1, 2) - (4, 2)成分. print(XZ.eval('10').eval('00'), XZ.eval('10').eval('01'), XZ.eval('10').eval('10'), XZ.eval('10').eval('11')) # (1, 3) - (4, 3)成分. print(XZ.eval('11').eval('00'), XZ.eval('11').eval('01'), XZ.eval('11').eval('10'), XZ.eval('11').eval('11')) # (1, 4) - (4, 4)成分. print(XZ) print(XZ.to_matrix().real) |
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 |
[出力結果] CircuitOp(<qiskit.circuit.quantumcircuit.QuantumCircuit object at 0x7f7b4a4fd150>, coeff=1.0) VectorStateFn(Statevector([1.+0.j, 0.+0.j, 0.+0.j, 0.+0.j], dims=(2, 2))) VectorStateFn(Statevector([0.+0.j, 0.+0.j, 0.+0.j, 1.+0.j], dims=(2, 2))) VectorStateFn(Statevector([0.+0.j, 0.+0.j, 1.+0.j, 0.+0.j], dims=(2, 2))) VectorStateFn(Statevector([0.+0.j, 1.+0.j, 0.+0.j, 0.+0.j], dims=(2, 2))) (1+0j) 0j 0j 0j 0j 0j 0j (1+0j) 0j 0j (1+0j) 0j 0j (1+0j) 0j 0j q_0: ──■── ┌─┴─┐ q_1: ┤ X ├ └───┘ [[1. 0. 0. 0.] [0. 0. 0. 1.] [0. 0. 1. 0.] [0. 1. 0. 0.]] PauliOp(Pauli('XZ'), coeff=1.0) DictStateFn({'10': (1+0j)}) DictStateFn({'11': (-1+0j)}) DictStateFn({'00': (1+0j)}) DictStateFn({'01': (-1+0j)}) 0j 0j (1+0j) 0j 0j 0j 0j (-1+0j) (1+0j) 0j 0j 0j 0j (-1+0j) 0j 0j XZ [[ 0. 0. 1. 0.] [ 0. 0. 0. -1.] [ 1. 0. 0. 0.] [ 0. -1. 0. 0.]] |