Skip to content

Commit 068f114

Browse files
Optimize dense cut calculation
1 parent e7719f5 commit 068f114

1 file changed

Lines changed: 11 additions & 11 deletions

File tree

pyqrackising/maxcut_tfim_util.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -319,26 +319,26 @@ def convert_bool_to_uint(samples):
319319
@njit(cache=True)
320320
def compute_energy(sample, G_m, n_qubits):
321321
energy = 0.0
322+
orig = np.repeat(sample, n_qubits)
323+
result = orig.copy()
324+
result = result.reshape(-1, n_qubits) ^ orig.reshape(-2, n_qubits)
325+
result = (result * 2) - 1
322326
for u in range(n_qubits):
323-
u_bit = sample[u]
324-
for v in range(u + 1, n_qubits):
325-
val = G_m[u, v]
326-
energy += -val if u_bit == sample[v] else val
327+
energy += (result[u] * G_m[u]).sum()
327328

328-
return energy
329+
return energy / 2.0
329330

330331

331332
@njit(cache=True)
332333
def compute_cut(sample, G_m, n_qubits):
333334
cut = 0.0
335+
orig = np.repeat(sample, n_qubits)
336+
result = orig.copy()
337+
result = result.reshape(-1, n_qubits) ^ orig.reshape(-2, n_qubits)
334338
for u in range(n_qubits):
335-
u_bit = sample[u]
336-
G_u = G_m[u]
337-
for v in range(u + 1, n_qubits):
338-
if u_bit != sample[v]:
339-
cut += G_u[v]
339+
cut += (result[u] * G_m[u]).sum()
340340

341-
return cut
341+
return cut / 2.0
342342

343343

344344
@njit(cache=True)

0 commit comments

Comments
 (0)