Just discovered a new Java LP solver, and did a quick update to the Pure Java LP Solver Benchmark.
Apache Commons Math (ACM) contains an LP solver. Version 3.6.1 of ACM was released in March 2016. Since then there’s been no updates. I believe v3.6.1 is officially not supported anymore, but v4.0.0 is still a work progress and not released. I always thought this was a bit strange…
Hipparchus was forked from ACM in 2016. Apparently with the main developers moving from ACM to the new Hipparchus project. This could explain why ACM hasn’t been updated since then. I’m primarily surprised I didn’t find out about Hipparchus until now.
Strictly speaking the LP solver in Hipparchus is not new and not necessarily different from the one in ACM, but I reran the Pure Java LP Solver Benchmark with Hipparchus included to find out. Here are the results:
The LP solver in Hipparchus has improved since forked from ACM. It’s faster and handles a few more cases/models than ACM. Still, compared to ojAlgo, it is much slower and handles significantly fewer cases.
The versions compared are:
- Hipparchus 2.2
- ACM 3.6.1
- ojAlgo 52.0.0-SNAPSHOT
You may want to read the original Pure Java LP Solver Benchmark post to get the details:
Benchmark Results
Model Name Solver Name Result State Time ============================================================================= ADLITTLE ACM OPTIMAL 21.644625ms ADLITTLE CPLEX OPTIMAL 2.868451ms ADLITTLE Hipparchus OPTIMAL 5.260293ms ADLITTLE ojAlgo OPTIMAL 1.091382ms AFIRO ACM OPTIMAL 1.29884ms AFIRO CPLEX OPTIMAL 1.391055ms AFIRO Hipparchus OPTIMAL 0.823148ms AFIRO ojAlgo OPTIMAL 0.301112ms AGG ACM OPTIMAL 167.000546ms AGG CPLEX OPTIMAL 7.726842ms AGG Hipparchus OPTIMAL 34.962631ms AGG ojAlgo OPTIMAL 5.718714ms AGG2 ACM OPTIMAL 813.284222ms AGG2 CPLEX OPTIMAL 11.74726ms AGG2 Hipparchus OPTIMAL 96.809732ms AGG2 ojAlgo OPTIMAL 8.171202ms AGG3 ACM OPTIMAL 820.1127ms AGG3 CPLEX OPTIMAL 11.864168ms AGG3 Hipparchus OPTIMAL 104.029883ms AGG3 ojAlgo OPTIMAL 9.846324ms BANDM ACM FAILED TIMEOUT BANDM CPLEX OPTIMAL 13.386505ms BANDM Hipparchus FAILED TIMEOUT BANDM ojAlgo OPTIMAL 31.851977ms BEACONFD ACM OPTIMAL 191.590583ms BEACONFD CPLEX OPTIMAL 5.000415ms BEACONFD Hipparchus OPTIMAL 37.023864ms BEACONFD ojAlgo OPTIMAL 3.074742ms BLEND ACM OPTIMAL 26.416073ms BLEND CPLEX OPTIMAL 2.792674ms BLEND Hipparchus OPTIMAL 7.306609ms BLEND ojAlgo OPTIMAL 1.005236ms BOEING1 ACM FAILED UNSTABLE BOEING1 CPLEX OPTIMAL 17.468899ms BOEING1 Hipparchus FAILED UNSTABLE BOEING1 ojAlgo OPTIMAL 141.358322ms BOEING2 ACM FAILED UNSTABLE BOEING2 CPLEX OPTIMAL 4.691281ms BOEING2 Hipparchus FAILED UNSTABLE BOEING2 ojAlgo OPTIMAL 8.989652ms BORE3D ACM FAILED TIMEOUT BORE3D CPLEX OPTIMAL 5.055457ms BORE3D Hipparchus FAILED TIMEOUT BORE3D ojAlgo OPTIMAL 3.456446ms BRANDY ACM FAILED TIMEOUT BRANDY CPLEX OPTIMAL 8.520516ms BRANDY Hipparchus FAILED TIMEOUT BRANDY ojAlgo OPTIMAL 7.21827ms CAPRI ACM FAILED UNSTABLE CAPRI CPLEX OPTIMAL 8.327037ms CAPRI Hipparchus FAILED UNSTABLE CAPRI ojAlgo OPTIMAL 45.807463ms DEGEN2 ACM FAILED TIMEOUT DEGEN2 CPLEX OPTIMAL 20.740736ms DEGEN2 Hipparchus OPTIMAL 1786.38462ms DEGEN2 ojAlgo OPTIMAL 242.32134ms E226 ACM FAILED TIMEOUT E226 CPLEX OPTIMAL 11.069458ms E226 Hipparchus OPTIMAL 92.910781ms E226 ojAlgo OPTIMAL 16.670109ms ETAMACRO ACM FAILED TIMEOUT ETAMACRO CPLEX OPTIMAL 16.462966ms ETAMACRO Hipparchus OPTIMAL 1067.294064ms ETAMACRO ojAlgo OPTIMAL 44.106707ms FFFFF800 ACM FAILED TIMEOUT FFFFF800 CPLEX OPTIMAL 18.735497ms FFFFF800 Hipparchus FAILED TIMEOUT FFFFF800 ojAlgo OPTIMAL 88.950183ms FINNIS ACM FAILED TIMEOUT FINNIS CPLEX OPTIMAL 13.818495ms FINNIS Hipparchus FAILED TIMEOUT FINNIS ojAlgo OPTIMAL 314.872777ms FORPLAN ACM FAILED UNSTABLE FORPLAN CPLEX OPTIMAL 8.894963ms FORPLAN Hipparchus OPTIMAL 239.978635ms FORPLAN ojAlgo OPTIMAL 9.780629ms GROW15 ACM FAILED TIMEOUT GROW15 CPLEX OPTIMAL 34.779264ms GROW15 Hipparchus FAILED TIMEOUT GROW15 ojAlgo OPTIMAL 326.21745ms GROW22 ACM FAILED TIMEOUT GROW22 CPLEX OPTIMAL 109.099592ms GROW22 Hipparchus FAILED WRONG GROW22 ojAlgo OPTIMAL 1669.318161ms GROW7 ACM FAILED TIMEOUT GROW7 CPLEX OPTIMAL 11.710556ms GROW7 Hipparchus FAILED TIMEOUT GROW7 ojAlgo OPTIMAL 18.688514ms ISRAEL ACM OPTIMAL 103.563223ms ISRAEL CPLEX OPTIMAL 5.685817ms ISRAEL Hipparchus OPTIMAL 21.941009ms ISRAEL ojAlgo OPTIMAL 7.192418ms KB2 ACM OPTIMAL 6.720416ms KB2 CPLEX OPTIMAL 2.016831ms KB2 Hipparchus OPTIMAL 2.361479ms KB2 ojAlgo OPTIMAL 0.562869ms LOTFI ACM OPTIMAL 546.936236ms LOTFI CPLEX OPTIMAL 4.722516ms LOTFI Hipparchus OPTIMAL 74.253037ms LOTFI ojAlgo OPTIMAL 2.791933ms PILOT4 ACM FAILED UNSTABLE PILOT4 CPLEX OPTIMAL 43.948191ms PILOT4 Hipparchus FAILED UNSTABLE PILOT4 ojAlgo OPTIMAL 719.960153ms RECIPELP ACM OPTIMAL 91.984139ms RECIPELP CPLEX OPTIMAL 2.647297ms RECIPELP Hipparchus OPTIMAL 18.608792ms RECIPELP ojAlgo OPTIMAL 1.076786ms SC105 ACM OPTIMAL 29.210945ms SC105 CPLEX OPTIMAL 2.386598ms SC105 Hipparchus OPTIMAL 6.913549ms SC105 ojAlgo OPTIMAL 0.784871ms SC205 ACM OPTIMAL 196.771752ms SC205 CPLEX OPTIMAL 4.356467ms SC205 Hipparchus OPTIMAL 35.378977ms SC205 ojAlgo OPTIMAL 3.716465ms SC50A ACM OPTIMAL 3.713265ms SC50A CPLEX OPTIMAL 1.637211ms SC50A Hipparchus OPTIMAL 1.447684ms SC50A ojAlgo OPTIMAL 0.340661ms SC50B ACM OPTIMAL 3.824722ms SC50B CPLEX OPTIMAL 1.352292ms SC50B Hipparchus OPTIMAL 1.598036ms SC50B ojAlgo OPTIMAL 0.362158ms SCAGR25 ACM FAILED TIMEOUT SCAGR25 CPLEX OPTIMAL 12.959499ms SCAGR25 Hipparchus FAILED TIMEOUT SCAGR25 ojAlgo OPTIMAL 109.784739ms SCAGR7 ACM OPTIMAL 104.018329ms SCAGR7 CPLEX OPTIMAL 4.137262ms SCAGR7 Hipparchus OPTIMAL 22.542501ms SCAGR7 ojAlgo OPTIMAL 2.415491ms SCFXM1 ACM FAILED TIMEOUT SCFXM1 CPLEX OPTIMAL 12.276423ms SCFXM1 Hipparchus FAILED TIMEOUT SCFXM1 ojAlgo OPTIMAL 14.529425ms SCFXM2 ACM FAILED TIMEOUT SCFXM2 CPLEX OPTIMAL 27.587144ms SCFXM2 Hipparchus FAILED TIMEOUT SCFXM2 ojAlgo OPTIMAL 108.236033ms SCORPION ACM OPTIMAL 998.703727ms SCORPION CPLEX OPTIMAL 6.786039ms SCORPION Hipparchus OPTIMAL 128.931352ms SCORPION ojAlgo OPTIMAL 10.188435ms SCSD1 ACM FAILED UNSTABLE SCSD1 CPLEX OPTIMAL 6.155597ms SCSD1 Hipparchus OPTIMAL 395.60068ms SCSD1 ojAlgo OPTIMAL 6.227832ms SCTAP1 ACM FAILED TIMEOUT SCTAP1 CPLEX OPTIMAL 7.630562ms SCTAP1 Hipparchus OPTIMAL 304.390071ms SCTAP1 ojAlgo OPTIMAL 14.170339ms SEBA ACM FAILED TIMEOUT SEBA CPLEX OPTIMAL 9.795508ms SEBA Hipparchus FAILED TIMEOUT SEBA ojAlgo OPTIMAL 212.850247ms SHARE1B ACM OPTIMAL 276.393102ms SHARE1B CPLEX OPTIMAL 5.268421ms SHARE1B Hipparchus OPTIMAL 49.818582ms SHARE1B ojAlgo OPTIMAL 5.161425ms SHARE2B ACM OPTIMAL 31.388091ms SHARE2B CPLEX OPTIMAL 3.36695ms SHARE2B Hipparchus OPTIMAL 6.988701ms SHARE2B ojAlgo OPTIMAL 1.098968ms STAIR ACM FAILED UNSTABLE STAIR CPLEX OPTIMAL 16.468764ms STAIR Hipparchus FAILED UNSTABLE STAIR ojAlgo OPTIMAL 42.203827ms STOCFOR1 ACM OPTIMAL 34.564914ms STOCFOR1 CPLEX OPTIMAL 2.932963ms STOCFOR1 Hipparchus OPTIMAL 9.242821ms STOCFOR1 ojAlgo OPTIMAL 1.156741ms TUFF ACM FAILED TIMEOUT TUFF CPLEX OPTIMAL 11.663417ms TUFF Hipparchus FAILED TIMEOUT TUFF ojAlgo FAILED TIMEOUT VTP-BASE ACM FAILED UNSTABLE VTP-BASE CPLEX OPTIMAL 3.198082ms VTP-BASE Hipparchus OPTIMAL 46.099096ms VTP-BASE ojAlgo OPTIMAL 2.165055ms