Directed Quantum Walk

A directed graph \(G=(V,E)\) differs from its undirected counterpart by having ordered vertex pairs in \(E\). Early work established strong quadrangularity and graph reversibility as prerequisites for coined quantum walks (CQWs) on such graphs. Recent studies show performance gains in centrality ranking via CTQWs, with applications like PageRank. Other models, like staggered quantum walks, have also been defined in these structures.

Directed graphs exhibit distinct transport properties, requiring different methods to characterize state transfer. Additionally, these graphs can exhibit new phenomena, such as zero state transfer.

In the subsequent sections, we will demonstrate how to use QWAK for simulating CTQWs on directed infinite lines and explore the enhanced decay rate of the survival probability in more general structures.

Dynamics

To define a directed infinite line, as shown in the figure below, we use the Hamiltonian \(H\) given by equation

(1)\[H = \sum_{x = L}^{R}e^{i\alpha}\ket{x+1}\bra{x}+e^{-i\alpha}\ket{x-1}\bra{x},\]

where \(L\) and \(R\) are the left and right borders of the line, respectively. We can obtain an infinite path graph by setting \(R\rightarrow\infty\) and \(L\rightarrow -\infty\).

orientedLineGraph

We implement the finite line using the path_graph function and add direction to it using the getWeightedGraph function available in the notebook.

1n = 100
2alpha = np.pi/2
3weight = np.exp(1j*alpha)
4baseGraph = nx.path_graph(n, create_using=nx.DiGraph)
5graph = getWeightedGraph(baseGraph, weight)

Inspired by previous work, we choose a non-localized initial condition given by equation

(2)\[\ket{\psi(0)} = \cos(\theta)\ket{-k} + e^{i\gamma}\sin(\theta)\ket{k},\]

which can be easily implemented in Python.

1k = 1
2theta = np.pi/4
3l = 0
4gamma = l * np.pi
5
6initCond = [(n//2-k, np.cos(theta)), (n//2+k, np.exp(1j*gamma)*np.sin(theta))]

After initializing the QWAK object, we compute the walk using the runWalk method. To specify a non-localized initial condition, we pass the customStateList parameter to provide both the node and its corresponding amplitude.

1t = 35
2
3qw = QWAK(graph)
4qw.runWalk(time = t, customStateList = initCond)
5
6probVec = qw.getProbVec()

The probability distribution is obtained using the getProbVec method. To study how the evolution of the probability distribution changes with different graph weights, the following figure displays the CTQW for multiple values of \(\alpha\).

orientedDynamicsPath

Indeed, the value of \(\alpha\) has a severe impact on the dynamics of the walk. In the case of an undirected graph (\(\alpha = 0\)), symmetry is expected around the center node; however, varying values of \(\alpha\) can alter the shape of the distribution, presenting a method of controlling how the walker propagates throughout the structure.

Survival Probability

The survival probability of a quantum walk can be characterized as the mean probability of finding the walker in a certain location after some time \(t\). Considering the symmetric position range of \([k_0,k_1]\), this quantity will be

\[P_{[k_0,k_1]}(t)=\sum_{i=k_0}^{k_1} P_{i}(t).\]

Here, we will use QWAK to run the walk for an interval using multiple values of \(\alpha\). Classically, the survival probability decays at a rate proportionate to \(t^{-\frac{1}{2}}\), while a quantum walk typically decays quadratically faster at a rate of \(t^{-1}\). It is known, however, that certain initial conditions can achieve enhanced decay rate, scaling with \(t^{-3}\).

decRateOriented

Using the previously defined directed graph and the chosen initial condition, we can analyze the impact of varying \(\alpha\) values on the decay rate of the survival probability:

 1timeList = np.linspace(0, 100, 500)
 2alphaList = [0, np.pi/3, np.pi/2]
 3decayRateMatrix = []
 4for alpha in alphaList:
 5    weight = np.exp(1j * alpha)
 6    graph = getWeightedGraph(baseGraph, weight)
 7    qw = QWAK(graph)
 8    qw.runMultipleWalks(timeList, customStateList=initCond)
 9    decayRateMatrix.append(
10                  qw.getSurvivalProbList(N//2 - k, N//2 + k))
11
12plt.loglog()
13for decayRate in decayRateMatrix:
14    plt.plot(survProbList)
15plt.show()

The code iterates through a list of \(\alpha\) values, generating a directed graph for each and computing the corresponding survival probabilities over time. These are stored in a decay rate matrix for log-log plotting, as shown in the previous figure.

Directional line graphs enable more effective control of interference effects in quantum walks. This allows for both normal and enhanced decay rates under broader initial conditions. The figure shows that an optimal \(\alpha\) value can be chosen to accelerate decay, irrespective of \(k\)’s parity.