質問編集履歴
15
編集
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
数値計算の問題点がわからない
|
test
CHANGED
@@ -9,14 +9,6 @@
|
|
9
9
|
[該当論文](https://arxiv.org/abs/1010.4705)
|
10
10
|
|
11
11
|
ちなみに理解しているつもりなんですが、全くできません。コードもエラーなしで動くのですが、、、(ということは何かがわかっていないということなのですが)
|
12
|
-
|
13
|
-
要点は初期状態が等しい重ね合わせ状態であることと、メイン計算は欲しいい点の確率振幅にマイナスを毎回かけながらすべての格子点に拡散行列とフリップフロップシフトというシフトの仕方が必要なようです。
|
14
|
-
|
15
|
-
### イメージ図
|
16
|
-
|
17
|
-
![正方格子量子探索](7ae71615029fd007225a2f924e5c1e7c.png)
|
18
|
-
|
19
|
-
上の図は3×③の正方格子点を表しており、赤い点がマーキングされた点です(マーキングされた点は任意です)。欲しい結果にある結果は190番目の格子点にマーキングをした20×20の正方格子の結果です。
|
20
12
|
|
21
13
|
```
|
22
14
|
|
14
内容変更
test
CHANGED
File without changes
|
test
CHANGED
@@ -36,16 +36,6 @@
|
|
36
36
|
|
37
37
|
y = i[1]
|
38
38
|
|
39
|
-
#boundary condition
|
40
|
-
|
41
|
-
x0 = (x+1) % N
|
42
|
-
|
43
|
-
x1 = (x-1 + N) % N
|
44
|
-
|
45
|
-
y0 = (y+1) % N
|
46
|
-
|
47
|
-
y1 = (y-1) % N
|
48
|
-
|
49
39
|
next_psi[x,y] = np.copy(np.array(np.dot(right,psi[x1,y])+np.dot(down,psi[x,y0])+np.dot(left,psi[x0,y])+ np.dot(up,psi[x,y1])))
|
50
40
|
|
51
41
|
psi = np.copy(next_psi)
|
13
内容変更
test
CHANGED
File without changes
|
test
CHANGED
@@ -7,10 +7,6 @@
|
|
7
7
|
![20*20の正方格子](7c8308f5057a6e57ebfeea4b0bdf97ee.jpeg)
|
8
8
|
|
9
9
|
[該当論文](https://arxiv.org/abs/1010.4705)
|
10
|
-
|
11
|
-
[参考論文2](https://arxiv.org/abs/1203.3950)
|
12
|
-
|
13
|
-
[参考論文](https://arxiv.org/abs/1005.3676)
|
14
10
|
|
15
11
|
ちなみに理解しているつもりなんですが、全くできません。コードもエラーなしで動くのですが、、、(ということは何かがわかっていないということなのですが)
|
16
12
|
|
@@ -22,49 +18,9 @@
|
|
22
18
|
|
23
19
|
上の図は3×③の正方格子点を表しており、赤い点がマーキングされた点です(マーキングされた点は任意です)。欲しい結果にある結果は190番目の格子点にマーキングをした20×20の正方格子の結果です。
|
24
20
|
|
25
|
-
|
21
|
+
```
|
26
22
|
|
27
|
-
```python
|
28
|
-
|
29
|
-
i
|
23
|
+
#main calculation
|
30
|
-
|
31
|
-
import matplotlib.pyplot as plt
|
32
|
-
|
33
|
-
import itertools
|
34
|
-
|
35
|
-
N = 20 #0<=x,y<=N
|
36
|
-
|
37
|
-
d = 4 #フリップフロップシフトの移動方向(4方向(4状態ともいう))
|
38
|
-
|
39
|
-
itr =100
|
40
|
-
|
41
|
-
#拡散行列
|
42
|
-
|
43
|
-
C = np.array([[-1,1,1,1],[1,-1,1,1],[1,1,-1,1],[1,1,1,-1]])/2
|
44
|
-
|
45
|
-
x_list = [i for i in range(N)]
|
46
|
-
|
47
|
-
y_list = [i for i in range(N)]
|
48
|
-
|
49
|
-
time = [i for i in range(itr)]
|
50
|
-
|
51
|
-
#フリップフロップシフトに場合分け(ここが怪しい?)
|
52
|
-
|
53
|
-
#right =[1,0,0,0],down=[0,1,0,0],left=[0,0,1,0],up=[0,0,0,1]
|
54
|
-
|
55
|
-
right= np.zeros((4,4));right[2,:] = C[2,:] #stage[x,y][0]
|
56
|
-
|
57
|
-
down = np.zeros((4,4));down[3,:] = C[3,:] #stage[x,y][1]
|
58
|
-
|
59
|
-
left = np.zeros((4,4));left[0,:] = C[0,:] #stage[x,y][2]
|
60
|
-
|
61
|
-
up = np.zeros((4,4));up[1,:] = C[1,:] #stage[x,y][3]にそれぞれ作用させる
|
62
|
-
|
63
|
-
#初期状態
|
64
|
-
|
65
|
-
psi = np.ones((N,N,4),dtype="float")/np.sqrt(N*N*4)
|
66
|
-
|
67
|
-
prob =[]
|
68
24
|
|
69
25
|
for t in range(itr):
|
70
26
|
|
@@ -74,11 +30,7 @@
|
|
74
30
|
|
75
31
|
else:
|
76
32
|
|
77
|
-
next_psi = np.zeros((N,N,4),dtype="float") #t+1秒後のpsiを収納する
|
78
|
-
|
79
|
-
psi[2,2] *= -1 #マーキング
|
80
|
-
|
81
|
-
for i in itertools.product(x_list,y_list):
|
33
|
+
for i in itertools.product(x_list,y_list):
|
82
34
|
|
83
35
|
x = i[0]
|
84
36
|
|
@@ -100,16 +52,14 @@
|
|
100
52
|
|
101
53
|
#print(t,psi)
|
102
54
|
|
103
|
-
prob.append(np.inner(psi[
|
55
|
+
mark_prob.append(np.inner(psi[8,8],psi[8,8]))
|
104
56
|
|
105
|
-
p
|
57
|
+
prob.append(np.inner(psi[16,16],psi[16,16]))
|
106
|
-
|
107
|
-
plt.show()
|
108
58
|
|
109
59
|
```
|
60
|
+
|
61
|
+
### 実行してみた
|
110
62
|
|
111
63
|
![イメージ説明](3b192866ddf979e8d53194625f9b8147.png)
|
112
64
|
|
113
65
|
こんなへんちくりんな結果になります。
|
114
|
-
|
115
|
-
どこが悪いのかわかりません!! 教えてくれる人も周りにいません。。。ご教授のほどよろしくお願い致します。
|
12
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -32,11 +32,11 @@
|
|
32
32
|
|
33
33
|
import itertools
|
34
34
|
|
35
|
-
N = 20
|
35
|
+
N = 20 #0<=x,y<=N
|
36
36
|
|
37
|
-
d = 4
|
37
|
+
d = 4 #フリップフロップシフトの移動方向(4方向(4状態ともいう))
|
38
38
|
|
39
|
-
itr =100
|
39
|
+
itr =100
|
40
40
|
|
41
41
|
#拡散行列
|
42
42
|
|
11
内容変更
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
この論文の結果を再現できる方いらっしゃいますか
|
test
CHANGED
@@ -1,70 +1,28 @@
|
|
1
|
-
### 目的
|
2
|
-
|
3
|
-
20×20の正方格子上のマークされた一つの座標をグローバーアルゴリズム(量子アルゴリズムの一つ)と周期境界条件をつかって時間ごとの存在確率を見る
|
4
|
-
|
5
1
|
### 問題点
|
6
2
|
|
7
|
-
|
3
|
+
論文の結果が再現できない
|
8
|
-
|
9
|
-
_________________________________________________
|
10
4
|
|
11
5
|
### 欲しい結果
|
12
6
|
|
13
|
-
![
|
7
|
+
![20*20の正方格子](7c8308f5057a6e57ebfeea4b0bdf97ee.jpeg)
|
14
8
|
|
15
|
-
|
9
|
+
[該当論文](https://arxiv.org/abs/1010.4705)
|
16
10
|
|
17
|
-
|
11
|
+
[参考論文2](https://arxiv.org/abs/1203.3950)
|
18
12
|
|
19
|
-
|
13
|
+
[参考論文](https://arxiv.org/abs/1005.3676)
|
20
14
|
|
21
|
-
|
15
|
+
ちなみに理解しているつもりなんですが、全くできません。コードもエラーなしで動くのですが、、、(ということは何かがわかっていないということなのですが)
|
22
16
|
|
23
|
-
|
17
|
+
要点は初期状態が等しい重ね合わせ状態であることと、メイン計算は欲しいい点の確率振幅にマイナスを毎回かけながらすべての格子点に拡散行列とフリップフロップシフトというシフトの仕方が必要なようです。
|
24
18
|
|
25
|
-
|
19
|
+
### イメージ図
|
26
20
|
|
27
|
-
|
21
|
+
![正方格子量子探索](7ae71615029fd007225a2f924e5c1e7c.png)
|
28
22
|
|
29
|
-
|
23
|
+
上の図は3×③の正方格子点を表しており、赤い点がマーキングされた点です(マーキングされた点は任意です)。欲しい結果にある結果は190番目の格子点にマーキングをした20×20の正方格子の結果です。
|
30
24
|
|
31
|
-
#
|
32
|
-
|
33
|
-
C = [[-1,2,2],[2,-1,2],[2,2,-1]]/3
|
34
|
-
|
35
|
-
各方向への重み
|
36
|
-
|
37
|
-
|0>=1/3*(-|0>+2|1>+2|2>)
|
38
|
-
|
39
|
-
|1>=1/3*(2|0>-|1>+2|2>)
|
40
|
-
|
41
|
-
|2>=1/3*(2|0>+2|1>-|2>)
|
42
|
-
|
43
|
-
これを上に代入すると、
|
44
|
-
|
45
|
-
Phi(t=1) = 1/np.sqrt(2**3*3)*(|000>(|0>+|1>+|2>) + |001>(|0>+|1>+|2>) + |010>(|0>+|1>+|2>) - |100>(|0>+|1>+|2>) + |011>(|0>+|1>+|2>) + |101>(|0>+|1>+|2>) + |110>(|0>+|1>+|2>) + |111>(|0>+|1>+|2>))
|
46
|
-
|
47
|
-
#Shift
|
48
|
-
|
49
|
-
|000>|0> → |001>|0>
|
50
|
-
|
51
|
-
|000>|1> → |010>|1>
|
52
|
-
|
53
|
-
|000>|2> → |100>|2>
|
54
|
-
|
55
|
-
とすると、
|
56
|
-
|
57
|
-
Phi(t=1) = 1/np.sqrt(2**3*3)*(|000>(|0>+|1>+|2>) + |001>(|0>+|1>+|2>) + |010>(|0>+|1>+|2>) - |100>(|0>+|1>+|2>) + |011>(|0>+|1>-|2>) + |101>(-|0>+|1>+|2>) + |110>(|0>-|1>+|2>) + |111>(|0>+|1>+|2>))
|
58
|
-
|
59
|
-
同様に繰り返すと、
|
60
|
-
|
61
|
-
phi(t=2) = 1/3*np.sqrt(2**3*3)*(|000>(3|0>+3|1>-3|2>) + |001>(-|0>+3|1>-2|2>) + |010>(3|0>-|1>-2|2>) - |100>(5|0>+5|1>+5|2>) + |011>(3|0>+3|1>+3|2>) + |101>(-3|0>+3|1>+3|2>) + |110>(3|0>-3|1>+3|2>) + |111>(-|0>-|1>+3|2>))
|
62
|
-
|
63
|
-
と、マーキングした|100>が増幅されていることがわかります。
|
64
|
-
|
65
|
-
```
|
66
|
-
|
67
|
-
これを2次元格子且つ、4方向の20*20で考えた場合上の欲しい結果と一致しません。
|
25
|
+
### 実行してみた
|
68
26
|
|
69
27
|
```python
|
70
28
|
|
@@ -74,61 +32,41 @@
|
|
74
32
|
|
75
33
|
import itertools
|
76
34
|
|
77
|
-
|
35
|
+
N = 20
|
78
36
|
|
79
|
-
|
37
|
+
d = 4
|
80
38
|
|
81
|
-
|
39
|
+
itr =100
|
82
40
|
|
83
|
-
|
41
|
+
#拡散行列
|
84
42
|
|
85
|
-
|
43
|
+
C = np.array([[-1,1,1,1],[1,-1,1,1],[1,1,-1,1],[1,1,1,-1]])/2
|
86
44
|
|
87
|
-
|
45
|
+
x_list = [i for i in range(N)]
|
88
46
|
|
89
|
-
|
47
|
+
y_list = [i for i in range(N)]
|
90
48
|
|
91
|
-
|
49
|
+
time = [i for i in range(itr)]
|
92
50
|
|
93
|
-
#
|
51
|
+
#フリップフロップシフトに場合分け(ここが怪しい?)
|
94
52
|
|
95
|
-
|
53
|
+
#right =[1,0,0,0],down=[0,1,0,0],left=[0,0,1,0],up=[0,0,0,1]
|
96
54
|
|
97
|
-
|
55
|
+
right= np.zeros((4,4));right[2,:] = C[2,:] #stage[x,y][0]
|
98
56
|
|
99
|
-
|
57
|
+
down = np.zeros((4,4));down[3,:] = C[3,:] #stage[x,y][1]
|
100
58
|
|
101
|
-
|
59
|
+
left = np.zeros((4,4));left[0,:] = C[0,:] #stage[x,y][2]
|
102
60
|
|
103
|
-
|
61
|
+
up = np.zeros((4,4));up[1,:] = C[1,:] #stage[x,y][3]にそれぞれ作用させる
|
104
62
|
|
105
|
-
#
|
63
|
+
#初期状態
|
106
64
|
|
107
|
-
|
65
|
+
psi = np.ones((N,N,4),dtype="float")/np.sqrt(N*N*4)
|
108
66
|
|
109
|
-
p
|
67
|
+
prob =[]
|
110
68
|
|
111
|
-
q = np.zeros((4,4)); q[1,:] = O[1,:]
|
112
|
-
|
113
|
-
r = np.zeros((4,4)); r[2,:] = O[2,:]
|
114
|
-
|
115
|
-
s = np.zeros((4,4)); s[3,:] = O[3,:]
|
116
|
-
|
117
|
-
###############
|
118
|
-
|
119
|
-
###初期設定
|
120
|
-
|
121
|
-
#initphi
|
122
|
-
|
123
|
-
phi_map = np.ones((2*n, 2*n,4),dtype="complex")
|
124
|
-
|
125
|
-
phi_map /= np.sqrt(4*N)
|
126
|
-
|
127
|
-
next_phi_map = np.zeros((2*n, 2*n,4),dtype="complex")
|
128
|
-
|
129
|
-
######################
|
130
|
-
|
131
|
-
for t in range(
|
69
|
+
for t in range(itr):
|
132
70
|
|
133
71
|
if t == 0:
|
134
72
|
|
@@ -136,74 +74,42 @@
|
|
136
74
|
|
137
75
|
else:
|
138
76
|
|
139
|
-
|
77
|
+
next_psi = np.zeros((N,N,4),dtype="float") #t+1秒後のpsiを収納する
|
140
78
|
|
79
|
+
psi[2,2] *= -1 #マーキング
|
141
80
|
|
81
|
+
for i in itertools.product(x_list,y_list): #すべての格子点で計算
|
142
82
|
|
143
83
|
x = i[0]
|
144
84
|
|
145
85
|
y = i[1]
|
146
86
|
|
147
|
-
#
|
87
|
+
#boundary condition
|
148
88
|
|
149
|
-
x
|
89
|
+
x0 = (x+1) % N
|
150
90
|
|
151
|
-
|
91
|
+
x1 = (x-1 + N) % N
|
152
92
|
|
153
|
-
|
93
|
+
y0 = (y+1) % N
|
154
94
|
|
155
|
-
|
95
|
+
y1 = (y-1) % N
|
156
96
|
|
157
|
-
y
|
97
|
+
next_psi[x,y] = np.copy(np.array(np.dot(right,psi[x1,y])+np.dot(down,psi[x,y0])+np.dot(left,psi[x0,y])+ np.dot(up,psi[x,y1])))
|
158
98
|
|
159
|
-
|
99
|
+
psi = np.copy(next_psi)
|
160
100
|
|
161
|
-
|
101
|
+
#print(t,psi)
|
162
102
|
|
103
|
+
prob.append(np.inner(psi[2,2],psi[2,2]))
|
163
104
|
|
164
|
-
|
165
|
-
if i == (12,12):
|
166
|
-
|
167
|
-
next_phi_map[i] = np.copy(np.array([np.dot(p, phi_map[x2,y]) + np.dot(q, phi_map[x1,y]) + np.dot(r, phi_map[x,y2])+ np.dot(s, phi_map[x,y1])]))
|
168
|
-
|
169
|
-
else:
|
170
|
-
|
171
|
-
next_phi_map[i] = np.copy(np.array([np.dot(P, phi_map[x2,y]) + np.dot(Q, phi_map[x1,y]) + np.dot(R, phi_map[x,y2])+ np.dot(S, phi_map[x,y1])]))
|
172
|
-
|
173
|
-
#p_map[i] = np.real(np.vdot(next_phi_map[i], next_phi_map[i]))
|
174
|
-
|
175
|
-
phi_map = np.copy(next_phi_map)
|
176
|
-
|
177
|
-
print(t, phi_map)
|
178
|
-
|
179
|
-
p_list.append(np.real(np.vdot(phi_map[12,12] , phi_map[12,12])))
|
180
|
-
|
181
|
-
########
|
182
|
-
|
183
|
-
plt.xlabel("t",fontsize="24")
|
184
|
-
|
185
|
-
plt.ylabel("probability",fontsize="24")
|
186
|
-
|
187
|
-
plt.plot(t_list,p_list,color="red",label="quantum walk",linewidth="1")
|
188
|
-
|
189
|
-
plt.legend(title="markedvertexprobablity",loc="best",fontsize=10)
|
190
|
-
|
191
|
-
plt.
|
105
|
+
plt.plot(time,prob)
|
192
106
|
|
193
107
|
plt.show()
|
194
108
|
|
195
|
-
|
196
|
-
|
197
109
|
```
|
198
110
|
|
199
|
-
![イメージ説明](
|
111
|
+
![イメージ説明](3b192866ddf979e8d53194625f9b8147.png)
|
200
112
|
|
201
|
-
|
113
|
+
こんなへんちくりんな結果になります。
|
202
114
|
|
203
|
-
|
115
|
+
どこが悪いのかわかりません!! 教えてくれる人も周りにいません。。。ご教授のほどよろしくお願い致します。
|
204
|
-
|
205
|
-
この質問はstackoverflowでもすることにします。
|
206
|
-
|
207
|
-
これはほぼ諦め状態です。(なんでできないのかわからないです。。)
|
208
|
-
|
209
|
-
![イメージ説明](f6db0c9b740d730c1e799a23a644bd0c.png)
|
10
追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -203,3 +203,7 @@
|
|
203
203
|
個人ごとですが、結構困っています。宜しくお願い致します。。
|
204
204
|
|
205
205
|
この質問はstackoverflowでもすることにします。
|
206
|
+
|
207
|
+
これはほぼ諦め状態です。(なんでできないのかわからないです。。)
|
208
|
+
|
209
|
+
![イメージ説明](f6db0c9b740d730c1e799a23a644bd0c.png)
|
9
追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -201,3 +201,5 @@
|
|
201
201
|
どなたか、上記の理想結果を実装できる方、または量子情報に詳しい方がいらっしゃいましたら、是非ご教授下さい。。
|
202
202
|
|
203
203
|
個人ごとですが、結構困っています。宜しくお願い致します。。
|
204
|
+
|
205
|
+
この質問はstackoverflowでもすることにします。
|
8
内容変更
test
CHANGED
File without changes
|
test
CHANGED
@@ -4,53 +4,67 @@
|
|
4
4
|
|
5
5
|
### 問題点
|
6
6
|
|
7
|
-
|
7
|
+
やり方をわかっているつもりだが、以下の結果が得られない。
|
8
|
-
|
9
|
-
###参考にした試料
|
10
|
-
|
11
|
-
もっと詳細に知りたい方は、以下の論文の3章を参考にしていただきますようお願い致します。
|
12
|
-
|
13
|
-
[Spatial search using the discrete time quantum walk](https://www.arxiv-vanity.com/papers/1010.4705/)
|
14
|
-
|
15
|
-
### グローバーアルゴリズムとは
|
16
|
-
|
17
|
-
以下にグローバーアルゴリズムの流れをポストします。
|
18
|
-
|
19
|
-
______________________________________________
|
20
|
-
|
21
|
-
![イメージ説明](cd8f2c0376cd6947f40c8e6f8874964d.png)
|
22
|
-
|
23
|
-
初期状態については、格子内の全ての可能なサイトを均等に重ね合わせて量子歩行者を開始し、すべての方向を等しく重ね合わせる。
|
24
8
|
|
25
9
|
_________________________________________________
|
26
10
|
|
27
|
-
初期値は原点に[1000]をもっていき、それ以外は[0000]とします。
|
28
|
-
|
29
11
|
### 欲しい結果
|
30
12
|
|
31
|
-
![](4
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
13
|
+
![イメージ説明](6d24453c3dbd07f5291b0900a8572767.jpeg)
|
14
|
+
|
15
|
+
### 3次元立方体の量子ウォークを用いたグローバー探索の場合
|
16
|
+
|
17
|
+
![イメージ説明](0407161182184a928d49aa398be7e063.png)
|
18
|
+
|
19
|
+
上記の図の|100>の解をマーキングしてその確率を見たい場合、グローバーアルゴリズムのやり方にのっとると、
|
20
|
+
|
21
|
+
```
|
22
|
+
|
23
|
+
initial_Phi = 1/np.sqrt(2**3*3)*(|000>(|0>+|1>+|2>) + |001>(|0>+|1>+|2>) + |010>(|0>+|1>+|2>) + |100>(|0>+|1>+|2>) + |011>(|0>+|1>+|2>) + |101>(|0>+|1>+|2>) + |110>(|0>+|1>+|2>) + |111>(|0>+|1>+|2>))
|
24
|
+
|
25
|
+
となり、欲しい解をマーキング→コイン演算子→シフト演算子をtstep繰り返します。今は2回繰り返すと、
|
26
|
+
|
27
|
+
#marking
|
28
|
+
|
29
|
+
Phi(t=1) = 1/np.sqrt(2**3*3)*(|000>(|0>+|1>+|2>) + |001>(|0>+|1>+|2>) + |010>(|0>+|1>+|2>) - |100>(|0>+|1>+|2>) + |011>(|0>+|1>+|2>) + |101>(|0>+|1>+|2>) + |110>(|0>+|1>+|2>) + |111>(|0>+|1>+|2>))
|
30
|
+
|
31
|
+
#coin
|
32
|
+
|
33
|
+
C = [[-1,2,2],[2,-1,2],[2,2,-1]]/3
|
34
|
+
|
35
|
+
各方向への重み
|
36
|
+
|
37
|
+
|0>=1/3*(-|0>+2|1>+2|2>)
|
38
|
+
|
39
|
+
|1>=1/3*(2|0>-|1>+2|2>)
|
40
|
+
|
41
|
+
|2>=1/3*(2|0>+2|1>-|2>)
|
42
|
+
|
43
|
+
これを上に代入すると、
|
44
|
+
|
45
|
+
Phi(t=1) = 1/np.sqrt(2**3*3)*(|000>(|0>+|1>+|2>) + |001>(|0>+|1>+|2>) + |010>(|0>+|1>+|2>) - |100>(|0>+|1>+|2>) + |011>(|0>+|1>+|2>) + |101>(|0>+|1>+|2>) + |110>(|0>+|1>+|2>) + |111>(|0>+|1>+|2>))
|
46
|
+
|
47
|
+
#Shift
|
48
|
+
|
49
|
+
|000>|0> → |001>|0>
|
50
|
+
|
51
|
+
|000>|1> → |010>|1>
|
52
|
+
|
53
|
+
|000>|2> → |100>|2>
|
54
|
+
|
55
|
+
とすると、
|
56
|
+
|
57
|
+
Phi(t=1) = 1/np.sqrt(2**3*3)*(|000>(|0>+|1>+|2>) + |001>(|0>+|1>+|2>) + |010>(|0>+|1>+|2>) - |100>(|0>+|1>+|2>) + |011>(|0>+|1>-|2>) + |101>(-|0>+|1>+|2>) + |110>(|0>-|1>+|2>) + |111>(|0>+|1>+|2>))
|
58
|
+
|
59
|
+
同様に繰り返すと、
|
60
|
+
|
61
|
+
phi(t=2) = 1/3*np.sqrt(2**3*3)*(|000>(3|0>+3|1>-3|2>) + |001>(-|0>+3|1>-2|2>) + |010>(3|0>-|1>-2|2>) - |100>(5|0>+5|1>+5|2>) + |011>(3|0>+3|1>+3|2>) + |101>(-3|0>+3|1>+3|2>) + |110>(3|0>-3|1>+3|2>) + |111>(-|0>-|1>+3|2>))
|
62
|
+
|
63
|
+
と、マーキングした|100>が増幅されていることがわかります。
|
64
|
+
|
65
|
+
```
|
66
|
+
|
67
|
+
これを2次元格子且つ、4方向の20*20で考えた場合上の欲しい結果と一致しません。
|
54
68
|
|
55
69
|
```python
|
56
70
|
|
@@ -64,13 +78,13 @@
|
|
64
78
|
|
65
79
|
n = 10
|
66
80
|
|
67
|
-
N =
|
81
|
+
N = (2*n)**2
|
68
|
-
|
82
|
+
|
69
|
-
step =
|
83
|
+
step = 100
|
70
|
-
|
84
|
+
|
71
|
-
x_list = [i for i in range(0,2*n
|
85
|
+
x_list = [i for i in range(0,2*n)]
|
72
|
-
|
86
|
+
|
73
|
-
y_list = [i for i in range(0,2*n
|
87
|
+
y_list = [i for i in range(0,2*n)]
|
74
88
|
|
75
89
|
t_list = [i for i in range(0,step+1)]
|
76
90
|
|
@@ -80,9 +94,9 @@
|
|
80
94
|
|
81
95
|
G = np.array([[-1,1,1,1],[1,-1,1,1],[1,1,-1,1],[1,1,1,-1]]) / 2
|
82
96
|
|
83
|
-
P = np.zeros((4,4)); P[
|
97
|
+
P = np.zeros((4,4)); P[0,:] = G[0,:]
|
84
|
-
|
98
|
+
|
85
|
-
Q = np.zeros((4,4)); Q[
|
99
|
+
Q = np.zeros((4,4)); Q[1,:] = G[1,:]
|
86
100
|
|
87
101
|
R = np.zeros((4,4)); R[2,:] = G[2,:]
|
88
102
|
|
@@ -92,9 +106,9 @@
|
|
92
106
|
|
93
107
|
O = np.array([[1,-1,-1,-1],[-1,1,-1,-1],[-1,-1,1,-1],[-1,-1,-1,1]]) / 2
|
94
108
|
|
95
|
-
p = np.zeros((4,4)); p[
|
109
|
+
p = np.zeros((4,4)); p[0,:] = O[0,:]
|
96
|
-
|
110
|
+
|
97
|
-
q = np.zeros((4,4)); q[
|
111
|
+
q = np.zeros((4,4)); q[1,:] = O[1,:]
|
98
112
|
|
99
113
|
r = np.zeros((4,4)); r[2,:] = O[2,:]
|
100
114
|
|
@@ -102,19 +116,15 @@
|
|
102
116
|
|
103
117
|
###############
|
104
118
|
|
105
|
-
###
|
119
|
+
###初期設定
|
120
|
+
|
106
|
-
|
121
|
+
#initphi
|
122
|
+
|
107
|
-
phi_map = np.
|
123
|
+
phi_map = np.ones((2*n, 2*n,4),dtype="complex")
|
108
|
-
|
124
|
+
|
109
|
-
phi_map
|
125
|
+
phi_map /= np.sqrt(4*N)
|
110
|
-
|
111
|
-
|
126
|
+
|
112
|
-
|
113
|
-
next_phi_map = np.zeros((2*n
|
127
|
+
next_phi_map = np.zeros((2*n, 2*n,4),dtype="complex")
|
114
|
-
|
115
|
-
p_map = np.zeros([2*n+1,2*n+1])
|
116
|
-
|
117
|
-
p_map[0,0] = 1.0
|
118
128
|
|
119
129
|
######################
|
120
130
|
|
@@ -128,50 +138,46 @@
|
|
128
138
|
|
129
139
|
for i in itertools.product(x_list,y_list):
|
130
140
|
|
141
|
+
|
142
|
+
|
131
143
|
x = i[0]
|
132
144
|
|
133
145
|
y = i[1]
|
134
146
|
|
135
|
-
#
|
147
|
+
#q
|
136
|
-
|
148
|
+
|
137
|
-
x1 = (x-1 + 2*n
|
149
|
+
x1 = (x-1 + 2*n) % (2*n)
|
150
|
+
|
138
|
-
|
151
|
+
#p
|
152
|
+
|
139
|
-
x2 = (x+1) % (2*n
|
153
|
+
x2 = (x+1) % (2*n)
|
154
|
+
|
140
|
-
|
155
|
+
#s
|
156
|
+
|
141
|
-
y1 = (y-1 + 2*n
|
157
|
+
y1 = (y-1 + 2*n) % (2*n)
|
158
|
+
|
142
|
-
|
159
|
+
#r
|
160
|
+
|
143
|
-
y2 = (y+1) % (2*n
|
161
|
+
y2 = (y+1) % (2*n)
|
144
|
-
|
145
|
-
|
162
|
+
|
163
|
+
|
146
164
|
|
147
165
|
if i == (12,12):
|
148
166
|
|
149
|
-
next_phi_map[i] = np.array([np.dot(p, phi_map[x2,y]) + np.dot(q, phi_map[x1,y])
|
167
|
+
next_phi_map[i] = np.copy(np.array([np.dot(p, phi_map[x2,y]) + np.dot(q, phi_map[x1,y]) + np.dot(r, phi_map[x,y2])+ np.dot(s, phi_map[x,y1])]))
|
150
|
-
|
151
|
-
+ np.dot(r, phi_map[x,y2])+ np.dot(s, phi_map[x,y1])
|
152
|
-
|
153
|
-
#それ以外
|
154
168
|
|
155
169
|
else:
|
156
170
|
|
157
|
-
next_phi_map[i] = np.array([np.dot(P, phi_map[x2,y]) + np.dot(Q, phi_map[x1,y])
|
171
|
+
next_phi_map[i] = np.copy(np.array([np.dot(P, phi_map[x2,y]) + np.dot(Q, phi_map[x1,y]) + np.dot(R, phi_map[x,y2])+ np.dot(S, phi_map[x,y1])]))
|
158
|
-
|
159
|
-
|
172
|
+
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
p_map[i] = np.real(np.
|
173
|
+
#p_map[i] = np.real(np.vdot(next_phi_map[i], next_phi_map[i]))
|
164
174
|
|
165
175
|
phi_map = np.copy(next_phi_map)
|
166
176
|
|
167
|
-
|
177
|
+
print(t, phi_map)
|
168
|
-
|
169
|
-
|
170
178
|
|
171
179
|
p_list.append(np.real(np.vdot(phi_map[12,12] , phi_map[12,12])))
|
172
180
|
|
173
|
-
|
174
|
-
|
175
181
|
########
|
176
182
|
|
177
183
|
plt.xlabel("t",fontsize="24")
|
@@ -186,12 +192,12 @@
|
|
186
192
|
|
187
193
|
plt.show()
|
188
194
|
|
195
|
+
|
196
|
+
|
189
197
|
```
|
190
198
|
|
191
|
-
### 結果
|
192
|
-
|
193
|
-
![イメージ説明](
|
199
|
+
![イメージ説明](c8c4eec927043ae73aca2f61c3548fe2.png)
|
194
|
-
|
195
|
-
|
200
|
+
|
196
|
-
|
197
|
-
|
201
|
+
どなたか、上記の理想結果を実装できる方、または量子情報に詳しい方がいらっしゃいましたら、是非ご教授下さい。。
|
202
|
+
|
203
|
+
個人ごとですが、結構困っています。宜しくお願い致します。。
|
7
修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
2次元正方格子上のグローバーアルゴリズムがうまくいかない
|
test
CHANGED
@@ -4,9 +4,7 @@
|
|
4
4
|
|
5
5
|
### 問題点
|
6
6
|
|
7
|
-
|
7
|
+
論文通りの実装が得られない。
|
8
|
-
|
9
|
-
(2週間以上進歩せず流石に教えて欲しいのですが、専門寄りでかつ、周りで知っている方がいないという理由で質問させて頂きます)
|
10
8
|
|
11
9
|
###参考にした試料
|
12
10
|
|
@@ -35,6 +33,22 @@
|
|
35
33
|
これは正確な答えではありません、あくまでイメージです。黒い線のような(maxが0.25として)周期をとります。
|
36
34
|
|
37
35
|
(上の参考文献に正確な欲しい結果が掲載されています。そちらを参考にしていただければ幸いです。)
|
36
|
+
|
37
|
+
### 追記
|
38
|
+
|
39
|
+
どうやら、上のコインを作用させた後に、フリップフロップウォークという歩き方でシフト演算子を作用させなければいけなかったみたいです。フリップフロップウォークとは
|
40
|
+
|
41
|
+
|→>|x,y> → |←>|x+1,y>
|
42
|
+
|
43
|
+
|←>|x,y> → |→>|x+1,y>
|
44
|
+
|
45
|
+
|↑>|x,y> → |↓>|x,y+1>
|
46
|
+
|
47
|
+
|↓>|x,y> → |↑>|x,y-1>
|
48
|
+
|
49
|
+
のように変化前の内部状態と変化後の内部状態が逆になるように歩かせる必要があります。
|
50
|
+
|
51
|
+
以下を踏まえて。。。
|
38
52
|
|
39
53
|
### 実装
|
40
54
|
|
@@ -66,9 +80,9 @@
|
|
66
80
|
|
67
81
|
G = np.array([[-1,1,1,1],[1,-1,1,1],[1,1,-1,1],[1,1,1,-1]]) / 2
|
68
82
|
|
69
|
-
P = np.zeros((4,4)); P[
|
83
|
+
P = np.zeros((4,4)); P[1,:] = G[1,:]
|
70
84
|
|
71
|
-
Q = np.zeros((4,4)); Q[
|
85
|
+
Q = np.zeros((4,4)); Q[0,:] = G[0,:]
|
72
86
|
|
73
87
|
R = np.zeros((4,4)); R[2,:] = G[2,:]
|
74
88
|
|
@@ -78,9 +92,9 @@
|
|
78
92
|
|
79
93
|
O = np.array([[1,-1,-1,-1],[-1,1,-1,-1],[-1,-1,1,-1],[-1,-1,-1,1]]) / 2
|
80
94
|
|
81
|
-
p = np.zeros((4,4)); p[
|
95
|
+
p = np.zeros((4,4)); p[1,:] = O[1,:]
|
82
96
|
|
83
|
-
q = np.zeros((4,4)); q[
|
97
|
+
q = np.zeros((4,4)); q[0,:] = O[0,:]
|
84
98
|
|
85
99
|
r = np.zeros((4,4)); r[2,:] = O[2,:]
|
86
100
|
|
@@ -92,7 +106,7 @@
|
|
92
106
|
|
93
107
|
phi_map = np.zeros((2*n+1, 2*n+1,4),dtype="complex")
|
94
108
|
|
95
|
-
phi_map[0,0]= np.array([1,
|
109
|
+
phi_map[0,0]= np.array([1,0,0,0])
|
96
110
|
|
97
111
|
#####初期確率
|
98
112
|
|
@@ -130,7 +144,7 @@
|
|
130
144
|
|
131
145
|
#マーキング
|
132
146
|
|
133
|
-
if i == (
|
147
|
+
if i == (12,12):
|
134
148
|
|
135
149
|
next_phi_map[i] = np.array([np.dot(p, phi_map[x2,y]) + np.dot(q, phi_map[x1,y])
|
136
150
|
|
@@ -154,7 +168,7 @@
|
|
154
168
|
|
155
169
|
|
156
170
|
|
157
|
-
p_list.append(np.real(np.vdot(phi_map[
|
171
|
+
p_list.append(np.real(np.vdot(phi_map[12,12] , phi_map[12,12])))
|
158
172
|
|
159
173
|
|
160
174
|
|
@@ -176,36 +190,8 @@
|
|
176
190
|
|
177
191
|
### 結果
|
178
192
|
|
179
|
-
![](
|
193
|
+
![イメージ説明](fe190f0f52a7c553b96575f708cc37b9.png)
|
180
194
|
|
181
|
-
|
195
|
+
周期的になりません。。。
|
182
196
|
|
183
|
-
上述した初期状態の取り方の意味がよくわかっていません(参考論文に書いてあるものをgoogle翻訳しました)。
|
184
|
-
|
185
|
-
|
197
|
+
少し専門寄りなのですが、グローバーのアルゴリズム自体は簡単なルールなので、どなたか再現できる方がいらっしゃいましたら、宜しくお願い致します。。
|
186
|
-
|
187
|
-
何卒宜しくお願い致します。
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
追記】
|
192
|
-
|
193
|
-
初期状態において、格子内の全ての可能なサイトに対して等しく重ね合わせると書いてあるので、上のコードの初期状態を
|
194
|
-
|
195
|
-
```python
|
196
|
-
|
197
|
-
phi_map = np.ones((2*n+1, 2*n+1,4),dtype="complex")
|
198
|
-
|
199
|
-
phi_map /= np.linalg.norm(phi_map)
|
200
|
-
|
201
|
-
#p_map[0,0]=1
|
202
|
-
|
203
|
-
```
|
204
|
-
|
205
|
-
と変更してみました。結果は
|
206
|
-
|
207
|
-
![イメージ説明](b78569dbba646cb0b75ac3c831d3dc2d.png)
|
208
|
-
|
209
|
-
。。。。。周期的にならない。。
|
210
|
-
|
211
|
-
本当に、お手上げ状態です。
|
6
タグ追加
test
CHANGED
File without changes
|
test
CHANGED
File without changes
|
5
タグ追加
test
CHANGED
File without changes
|
test
CHANGED
File without changes
|
4
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -198,6 +198,8 @@
|
|
198
198
|
|
199
199
|
phi_map /= np.linalg.norm(phi_map)
|
200
200
|
|
201
|
+
#p_map[0,0]=1
|
202
|
+
|
201
203
|
```
|
202
204
|
|
203
205
|
と変更してみました。結果は
|
3
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -185,3 +185,25 @@
|
|
185
185
|
前述しましたが、周りにだれも教えてくれない中一人で奮闘している状況です。。どんなことでも良いので、ご意見頂戴したいです。。
|
186
186
|
|
187
187
|
何卒宜しくお願い致します。
|
188
|
+
|
189
|
+
|
190
|
+
|
191
|
+
追記】
|
192
|
+
|
193
|
+
初期状態において、格子内の全ての可能なサイトに対して等しく重ね合わせると書いてあるので、上のコードの初期状態を
|
194
|
+
|
195
|
+
```python
|
196
|
+
|
197
|
+
phi_map = np.ones((2*n+1, 2*n+1,4),dtype="complex")
|
198
|
+
|
199
|
+
phi_map /= np.linalg.norm(phi_map)
|
200
|
+
|
201
|
+
```
|
202
|
+
|
203
|
+
と変更してみました。結果は
|
204
|
+
|
205
|
+
![イメージ説明](b78569dbba646cb0b75ac3c831d3dc2d.png)
|
206
|
+
|
207
|
+
。。。。。周期的にならない。。
|
208
|
+
|
209
|
+
本当に、お手上げ状態です。
|
2
欲しい結果を明記しなおした
test
CHANGED
File without changes
|
test
CHANGED
@@ -32,7 +32,9 @@
|
|
32
32
|
|
33
33
|
![](487303f840156a0634d15a4cedd44ccd.jpeg)
|
34
34
|
|
35
|
+
これは正確な答えではありません、あくまでイメージです。黒い線のような(maxが0.25として)周期をとります。
|
36
|
+
|
35
|
-
|
37
|
+
(上の参考文献に正確な欲しい結果が掲載されています。そちらを参考にしていただければ幸いです。)
|
36
38
|
|
37
39
|
### 実装
|
38
40
|
|
1
情報追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -32,7 +32,7 @@
|
|
32
32
|
|
33
33
|
![](487303f840156a0634d15a4cedd44ccd.jpeg)
|
34
34
|
|
35
|
-
これが絶対ではないのですが、黒い線のような周期をとります。
|
35
|
+
これが絶対ではないのですが、黒い線のような周期をとります。(上の参考文献に正確な欲しい結果が掲載されていますお手数ですが、宜しくお願い致します。)
|
36
36
|
|
37
37
|
### 実装
|
38
38
|
|