Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Note: `@` refers to matrix-matrix or matrix-vector multiplication. `*` refers to elementwise multiplication.
- degrees = // vector s.t. degree[i] is the degree of the i'th node in graph G
- D = // diagonal matrix s.t. D[i, i] = degrees[i]
- D_inv = // diagonal matrix s.t. D_inv[i, i] = 1 / sqrt(degrees[i])
- q = // zero matrix of shape (max_iters, num_nodes)
- grad = -alpha * D_inv @ s
- while k < max_iters do
- for i in num_nodes do
- rad = rho * alpha * sqrt(degrees[i])
- | q[k,i] - (grad[i] + rad) if q[k,i] - grad[i] >= rad
- q[k + 1, i] = | 0 if -rad < q[k,i] - grad[i] < rad
- | q[k,i] - (grad[i] - rad) if q[k,i] - grad[i] <= -rad
- grad = D_inv @ (D - (1 / alpha) / 2 * (D + A)) @ D_inv @ q[k] - alpha * D_inv @ s
- end for
- k = k + 1
- end while
- return D_inv @ q[k]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement