Skip to content

Releases: vm6502q/PyQrackIsing

Vectorize local repulsion sampling

07 Jun 20:05

Choose a tag to compare

Local attraction/repulsion sampling can be vectorized through better use of the numpy API on its arrays.

Full Changelog: v9.16.0...v9.16.1

sha1sum results:
474976b88dd827c754819fef15e5f85563794b2e pyqrackising-9.16.1-py3-none-macosx_14_0_arm64.whl
c311763c0f95a044eb30f3ff2f76242ac59c1e63 pyqrackising-9.16.1-py3-none-macosx_15_0_arm64.whl
4c2d52f28f3e87843a8dd68618571a29e559fc4a pyqrackising-9.16.1-py3-none-manylinux_2_35_x86_64.whl
9405531211425e0e9b9dc4ba5373dd2853abccc3 pyqrackising-9.16.1-py3-none-manylinux_2_39_x86_64.whl
5b5a2b284c45e9d9bc613e76654127b2061f60b7 pyqrackising-9.16.1-py3-none-win_amd64.whl
9b1ecb085be2350794383bc5d62b1f6a23f033a8 pyqrackising-9.16.1.tar.gz

Hybrid MaxCut/spin-glass solver

07 Jun 16:38

Choose a tag to compare

We noticed, our best performance on MaxCut might be with a combination of the dense TFIM-based MaxCut solver and the sparse local-optimizing solver. To encourage awareness, experimentation, and adoption, we wrap this configuration neatly as spin_glass_solver_hybrid.

Full Changelog: v9.15.5...v9.16.0

sha1sum results:
e6eb25c2913fb94c8c811718f7c53276f19cb83f pyqrackising-9.16.0-py3-none-macosx_14_0_arm64.whl
3ac15589ee0a496cf3c4b7a1306b7faa90acb242 pyqrackising-9.16.0-py3-none-macosx_15_0_arm64.whl
ccaaf621ba203d702260d053aff37fec441bfc7c pyqrackising-9.16.0-py3-none-manylinux_2_35_x86_64.whl
0fb466e0cfcb00636fd6892328d727892b6e9ece pyqrackising-9.16.0-py3-none-manylinux_2_39_x86_64.whl
b473a0f711aec2818e17383653c8e029db20c1f8 pyqrackising-9.16.0-py3-none-win_amd64.whl
efff898a7e3ad3ecc087475194ff69a557f1a253 pyqrackising-9.16.0.tar.gz

Micro-optimize dense cut verifiers

07 Jun 14:55

Choose a tag to compare

In this release @WrathfulSpatula adds explicit (numpy) vectorization to dense MaxCut verifiers.

Full Changelog: v9.15.4...v9.15.5

sha1sum results:
4b3868c2fcc8483ccfed3e89efa61578067fbe30 pyqrackising-9.15.5-py3-none-macosx_14_0_arm64.whl
2c4d5d13c8cc185e7aaa7c7e06e873fe8fe3e05a pyqrackising-9.15.5-py3-none-macosx_15_0_arm64.whl
6e48c30c0625b3507d18793e78f973ba4f4a7184 pyqrackising-9.15.5-py3-none-manylinux_2_35_x86_64.whl
e850142a4f8e24c35c14a4cb32a33416fa0bdef7 pyqrackising-9.15.5-py3-none-manylinux_2_39_x86_64.whl
4c14027c0ab80ed4f30e634ccc5e1cc1230c905d pyqrackising-9.15.5-py3-none-win_amd64.whl
3a22b7ceb0e131bbabb1050224e349ebea9c70d2 pyqrackising-9.15.5.tar.gz

Actually reverse dipole attraction/repulsion sign for sample generation

03 Jun 17:00

Choose a tag to compare

Claude and I (Dan Strano) had a slight miscommunication: as we discussed how the quantitative difference in results between reversed conventions for dipole attraction/repulsion were nearly indistinguishable, Claude took that as a signal to revert the change. However, reversing the convention was rather the physically-principled choice, for minimizing potential energy of the magnetic dipoles, and it's also in perfect qualitative agreement with how the adiabatic MaxCut case has always worked (which was long giving us a hint I didn't pick up on til yesterday).

Full Changelog: v9.15.1...v9.15.2

e3e6931f2126d0d09abf35763668163b34093395 pyqrackising-9.15.2-py3-none-macosx_14_0_arm64.whl
1e1d9dfa501d3b877eab826aaf26ffda333c0aca pyqrackising-9.15.2-py3-none-macosx_15_0_arm64.whl
c246d13de5bf8fd142bf7373b606469d53900cb5 pyqrackising-9.15.2-py3-none-manylinux_2_35_x86_64.whl
abfcc065e171fbedd3e98b6c2240c26cbed4fd9f pyqrackising-9.15.2-py3-none-manylinux_2_39_x86_64.whl
d7142cbeaef09d3f405e2cee601459fb088a0cb6 pyqrackising-9.15.2-py3-none-win_amd64.whl
753e283e034a3af3f4e87dcd454231e2080ee2de pyqrackising-9.15.2.tar.gz

Move envelope correction into probability_by_hamming_weight

03 Jun 13:13

Choose a tag to compare

In my haste, last night, I missed the fact that the Hamming weight probability decay envelope should have been applied in probability_by_hamming_weight. Fixing this seems to improve MaxCut quality on preliminary tests. (The envelope should be considered an essential correction on the original heuristic model, originally missed by D. Strano.)

Full Changelog: v9.15.0...v9.15.1

sha1sum results:
df5ad77d507301711883a63a7e4e0198b195d3dc pyqrackising-9.15.1-py3-none-macosx_14_0_arm64.whl
7f0caea34c2d9ba6187b18c59eaf846e2c95eb43 pyqrackising-9.15.1-py3-none-macosx_15_0_arm64.whl
40f142f63f31bea4201240d84513c4d940f1079c pyqrackising-9.15.1-py3-none-manylinux_2_35_x86_64.whl
6b3a1a7bab44688e9abe87e5c92cff730c91e3f9 pyqrackising-9.15.1-py3-none-manylinux_2_39_x86_64.whl
256b65ebfb7784661cc627dbe9d667de2d2c7f4e pyqrackising-9.15.1-py3-none-win_amd64.whl
ae7fe999fed56ba5926b3061130e8bcc71d80337 pyqrackising-9.15.1.tar.gz

Reverse attraction/repulsion; envelope on TFIM

03 Jun 03:31

Choose a tag to compare

This release (correctly) observes that qubits of opposite spin, like "bar magnets," attract "north pole to south pole (and vice versa)." Also, (Anthropic) Claude and Dan Strano have observed from empirical simulation compared against Gibbs state sampling literature that the original TFIM heuristic model should carry an additional Gaussian envelope, most pronounced at t=0 (where Trotterization initialization nonetheless defines the correct ideal state and precludes potential assumption of singlet state, from the literature).

2d6e177968e0d6342f9a87477cb8382286aaa6d0 pyqrackising-9.15.0-py3-none-macosx_14_0_arm64.whl
4ae47f124ab23c6a27a8e8774c7d6eb43eb43140 pyqrackising-9.15.0-py3-none-macosx_15_0_arm64.whl
99d9e87a9192f2fa3116497f63f2d954f2bae235 pyqrackising-9.15.0-py3-none-manylinux_2_35_x86_64.whl
906b3068caaff3b07ecfd42a98fc54999d49be53 pyqrackising-9.15.0-py3-none-manylinux_2_39_x86_64.whl
0bf97f9d0be41cca87adc971b8605454439e1faa pyqrackising-9.15.0-py3-none-win_amd64.whl
2924c3bc4164e6c3ef202c2f3957335ee929cfa4 pyqrackising-9.15.0.tar.gz

Belief propagation

01 Jun 18:41
b5aab7c

Choose a tag to compare

I asked (Anthropic) Claude for more critique or improvements, this time informed by an actual set of results on GSet: the one significant suggestion they made was that belief propagation (BP) for "warm start" of the local-search (and Gray code search) optimizer might be a good candidate to compare against adiabatic TFIM heuristic "warm start," because the repulsion/attraction component of the TFIM heuristic is inherently local, while BP is informed by global structure, followed by local searching. (This might matter most for graphs with mixed positive and negative weights.) It is opt-in: set bp_scale (default: None) to some positive value to budget a comparison against BP.

26fc83e0ec83d268c1db717cc6cf13a01daf7160 pyqrackising-9.14.0-py3-none-macosx_14_0_arm64.whl
044bf4d5e6d6e4b082e4a7230542914798ffb693 pyqrackising-9.14.0-py3-none-macosx_15_0_arm64.whl
6aefbef6e2af15066e789c175507944b8ad2f93b pyqrackising-9.14.0-py3-none-manylinux_2_35_x86_64.whl
b19c497b441b0972f7cb43d887954a5fc111cd4d pyqrackising-9.14.0-py3-none-manylinux_2_39_x86_64.whl
9c22209829f3735934b3264a031e8d9f3dab2634 pyqrackising-9.14.0-py3-none-win_amd64.whl
e40d53bb9669f324587efd3cabb82cf3e8a0c74f pyqrackising-9.14.0.tar.gz

Restore B&B solvers (alongside MaxSAT)

09 May 18:57

Choose a tag to compare

(Apologies for the release "thrashing," against the DOI, but generative LLMs iterate quickly, and this probably the last of the updates for a while.) The branch-and-bound solvers are still often faster than the MaxSAT-based exact solvers, so we give users both options. (It has not yet been demonstrated that the MaxSAT-based approach ever works faster in practice at relevant scales, but Claude's thinking was that literature in recent years suggests it could, at least at sufficient problem scale or depending on sparsity or quality of "warm start.")

Full Changelog: v9.12.3...v9.13.0

sha1sum results:
1d54d64f4a9e6d92c538436298fea764547341f3 pyqrackising-9.13.0-py3-none-macosx_14_0_arm64.whl
db27812b74a0564fdf3b1febb09990e53503e7e7 pyqrackising-9.13.0-py3-none-macosx_15_0_arm64.whl
5a3ae20e97ab6533b9c8d6e6a778c8dc67f27018 pyqrackising-9.13.0-py3-none-manylinux_2_35_x86_64.whl
565697e1d0f8cfed33eacec5d4515ce8fb6fa46b pyqrackising-9.13.0-py3-none-manylinux_2_39_x86_64.whl
6d487556d6debd42fc510df382f8974d40e4b334 pyqrackising-9.13.0-py3-none-win_amd64.whl
51bf0b8ca221f35eaa936ae0607e956947bdceba pyqrackising-9.13.0.tar.gz

Claude adds MaxSAT-based MaxCut solver and debugs

09 May 17:18

Choose a tag to compare

Claude decided on second thought that branch-and-bound for a "warm start" that was often already near-exactly-optimal was likely the wrong approach and suggested a MaxSAT-based set of solvers instead. Also, they caught an inconsistency between the calculation of cut values and the assumed (upper-triangular) forms of the inputs. Luckily, there's no shock, here: on scripts like maxcut_benchmarks.py, the results are as-good as before or improved, and PyQrackIsing still tends to outperform Goemans-Williamson for solution quality on many common cases (and still tending to achieve parity on pathological cases, same for both methods, empirically).

Full Changelog: v9.12.2...v9.12.3

sha1sum results:
f2fcdadf8c29c18d3b9f1f5647ace7699ef4ccbb pyqrackising-9.12.3-py3-none-macosx_14_0_arm64.whl
218836e3be17f2c1f68312ce950a81090bb6004d pyqrackising-9.12.3-py3-none-macosx_15_0_arm64.whl
040249159c0fd8eb5e4e0d7e25145a9197fbaee9 pyqrackising-9.12.3-py3-none-manylinux_2_35_x86_64.whl
b36174d161f984d64e88e4ee0505b0a7728f315d pyqrackising-9.12.3-py3-none-manylinux_2_39_x86_64.whl
24cfdd6cfbf18941f76df058bf28b274c6da0c6c pyqrackising-9.12.3-py3-none-win_amd64.whl
846fd972114b91993609c5efff6aa71e4553544c pyqrackising-9.12.3.tar.gz

Parallelize exact MAXCUT solvers

09 May 04:20

Choose a tag to compare

The exact MAXCUT solvers currently provided might never see widespread real-world use in applications, for performance reasons, but I asked Claude to at least parallelize them on CPU, in numba semantics. This also raised the cache=True decorator option to my attention, and literally every numba njit function in the library except for potentially streaming variants (which take function pointers as arguments) are amenable to this optimization, for much quicker initialization.

Full Changelog: v9.12.1...v9.12.2

sha1sum results:
8f5f7ae30fc7a8a6f096cccdbb2b420f470a95d3 pyqrackising-9.12.2-py3-none-macosx_14_0_arm64.whl
a7639f82791eca00c6c5f508d2ee28637a39d3ab pyqrackising-9.12.2-py3-none-macosx_15_0_arm64.whl
3f74193911d418f9bd170fdfe7baaa89fca77164 pyqrackising-9.12.2-py3-none-manylinux_2_35_x86_64.whl
4c0fac05a29448eeb48400ea3cbdc076cb7fc42f pyqrackising-9.12.2-py3-none-manylinux_2_39_x86_64.whl
b065633654ee4560b9c5e87f62d9a3850062f714 pyqrackising-9.12.2-py3-none-win_amd64.whl
0469aa42d662698ca53afe378f354a9ee77ab2f7 pyqrackising-9.12.2.tar.gz