glpk-ts
v0.0.11
Published
We aim to provide an easy-to-use interface to [GLPK](https://www.gnu.org/software/glpk/) which works out of the box. Of course, Javascript is not the best choice for a modeling language. Nevertheless it might be a suitable alternative for some application
Downloads
2,519
Readme
GLPK interface for TypeScript powered by WebAssembly
We aim to provide an easy-to-use interface to GLPK which works out of the box. Of course, Javascript is not the best choice for a modeling language. Nevertheless it might be a suitable alternative for some applications because it runs on almost any machine (in the browser) without additional dependencies and setup.
Installation
Using the usual command
npm install glpk-ts
you should get the library together with its wasm-dependency.
Example
const { loadModule, Model } = require('glpk-ts')
loadModule().then(() => {
const m = new Model()
// create 2 non-negative variables
const [x, y] = m.addVars(2, { lb: 0.0, obj: -1.0 })
// add the constraint x + y <= 1
m.addConstr({
ub: 1.0,
coeffs: [
[x, 1.0],
[y, 1.0],
],
})
// let the simplex method solve the problem
m.simplex()
console.log(`x = ${x.value}, y = ${y.value}`)
})
Documentation
You can find the documentation here.
Performance
Below you can find a table with some runtime stats which I obtained on my local machine (i7-4790K running Ubuntu 20.04.2). The benchmark instances are taken from the Netlib Repository. Please have a look at this repository if you want to try it on your own machine.
If you have any idea why NodeJS is performing so great, please give me a hint.
| | NodeJSv14.17.0 | Chrome90.0.4430.212 | Firefox 88.0.1 | C++ (ref)GLPK 4.65 | PyGLPK (ref)GLPK 4.65 | |-|-|-|-|-|-| | 25fv47 | 23.0 | 433.6 | 463.0 | 186.8 | 185.7 | | 80bau3b | 78.0 | 1589.4 | 1048.0 | 582.4 | 574.8 | | adlittle | 0.1 | 2.8 | 1.0 | 0.7 | 0.8 | | afiro | 0.0 | 0.2 | 0.0 | 0.1 | 0.1 | | agg | 0.1 | 5.3 | 4.0 | 2.0 | 2.7 | | agg2 | 0.1 | 6.2 | 4.0 | 2.1 | 2.5 | | agg3 | 0.0 | 7.0 | 6.0 | 2.1 | 2.3 | | bandm | 2.1 | 49.9 | 36.0 | 19.7 | 20.6 | | beaconfd | 0.1 | 4.3 | 3.0 | 1.4 | 1.6 | | blend | 0.1 | 1.9 | 1.0 | 0.5 | 0.6 | | bnl1 | 5.1 | 115.1 | 78.0 | 44.1 | 44.9 | | bnl2 | 58.0 | 1027.9 | 745.0 | 427.9 | 428.4 | | boeing1 | 1.1 | 23.3 | 17.0 | 9.1 | 9.0 | | boeing2 | 0.0 | 4.2 | 4.0 | 1.6 | 1.7 | | bore3d | 0.0 | 7.0 | 6.0 | 2.4 | 2.5 | | brandy | 1.0 | 22.8 | 17.0 | 8.0 | 8.2 | | capri | 0.0 | 12.0 | 8.0 | 4.1 | 5.4 | | cycle | 24.0 | 453.6 | 323.0 | 169.5 | 181.0 | | czprob | 10.0 | 215.6 | 151.0 | 77.7 | 78.3 | | d2q06c | 209.1 | 3833.0 | 2836.0 | 1701.7 | 1728.5 | | d6cube | 71.1 | 1400.8 | 1056.0 | 557.5 | 557.9 | | degen2 | 3.1 | 69.2 | 48.0 | 26.0 | 28.2 | | degen3 | 42.0 | 799.7 | 594.0 | 340.1 | 337.0 | | dfl001 | 3408.1 | 55618.9 | 43681.0 | 28133.9 | 26272.0 | | e226 | 0.0 | 16.0 | 13.0 | 9.4 | 6.6 | | etamacro | 1.0 | 26.4 | 22.0 | 9.0 | 9.2 | | fffff800 | 2.1 | 43.4 | 43.0 | 15.0 | 16.1 | | finnis | 1.0 | 23.3 | 18.0 | 7.8 | 8.1 | | fit1d | 2.1 | 56.1 | 43.0 | 21.7 | 21.0 | | fit1p | 7.0 | 168.2 | 114.0 | 56.1 | 56.8 | | fit2d | 301.1 | 6178.8 | 4822.0 | 2482.1 | 2427.5 | | fit2p | 475.1 | 9876.5 | 6659.0 | 3510.5 | 3516.4 | | forplan | 0.1 | 12.2 | 10.0 | 4.5 | 5.2 | | ganges | 6.0 | 141.4 | 99.0 | 45.3 | 44.7 | | gfrd-pnc | 1.1 | 47.9 | 29.0 | 14.1 | 14.1 | | greenbea | 129.0 | 2390.1 | 1900.0 | 993.9 | 990.8 | | greenbeb | 102.1 | 1932.2 | 1368.0 | 780.9 | 780.7 | | grow15 | 2.1 | 52.2 | 38.0 | 20.4 | 18.7 | | grow22 | 6.0 | 125.0 | 92.0 | 44.7 | 46.1 | | grow7 | 0.0 | 14.8 | 11.0 | 5.3 | 5.3 | | israel | 0.0 | 7.2 | 5.0 | 2.5 | 2.6 | | kb2 | 0.0 | 1.6 | 1.0 | 0.4 | 0.5 | | lotfi | 0.1 | 3.8 | 3.0 | 1.3 | 1.4 | | maros-r7 | 206.1 | 3609.4 | 2988.0 | 1400.2 | 1407.4 | | maros | 16.1 | 276.7 | 241.0 | 113.0 | 111.9 | | modszk1 | 6.1 | 118.2 | 83.0 | 42.6 | 43.9 | | nesm | 26.1 | 485.0 | 353.0 | 198.4 | 198.3 | | perold | 24.1 | 384.0 | 279.0 | 157.5 | 158.1 | | pilot.ja | 76.1 | 1191.9 | 903.0 | 510.5 | 512.5 | | pilot | 258.1 | 4654.1 | 3617.0 | 1905.2 | 1901.8 | | pilot.we | 28.0 | 502.9 | 362.0 | 205.2 | 210.1 | | pilot4 | 8.1 | 151.6 | 111.0 | 64.5 | 63.7 | | pilot87 | 636.0 | 12021.3 | 9820.0 | 5359.6 | 4743.4 | | pilotnov | 25.0 | 487.1 | 362.0 | 215.1 | 201.6 | | recipe | 0.0 | 0.6 | 0.0 | 0.2 | 0.3 | | sc105 | 0.1 | 2.2 | 1.0 | 0.5 | 0.6 | | sc205 | 0.0 | 13.2 | 6.0 | 4.4 | 2.8 | | sc50a | 0.0 | 0.4 | 0.0 | 0.2 | 0.2 | | sc50b | 0.0 | 0.5 | 0.0 | 0.3 | 0.2 | | scagr25 | 1.1 | 36.2 | 25.0 | 17.2 | 12.6 | | scagr7 | 0.1 | 3.4 | 2.0 | 1.5 | 1.3 | | scfxm1 | 1.0 | 23.2 | 14.0 | 8.0 | 7.5 | | scfxm2 | 3.0 | 69.6 | 45.0 | 27.1 | 24.8 | | scfxm3 | 7.1 | 142.3 | 100.0 | 49.0 | 50.2 | | scorpion | 0.0 | 12.5 | 9.0 | 5.5 | 4.2 | | scrs8 | 2.0 | 55.4 | 38.0 | 19.1 | 20.5 | | scsd1 | 0.0 | 4.3 | 2.0 | 1.6 | 1.6 | | scsd6 | 0.0 | 17.9 | 12.0 | 6.6 | 6.8 | | scsd8 | 5.0 | 104.8 | 73.0 | 37.7 | 38.7 | | sctap1 | 0.1 | 21.0 | 10.0 | 5.9 | 6.2 | | sctap2 | 9.1 | 192.0 | 129.0 | 69.3 | 70.2 | | sctap3 | 15.1 | 291.8 | 206.0 | 110.2 | 112.8 | | seba | 1.0 | 35.4 | 24.0 | 11.4 | 12.1 | | share1b | 0.1 | 7.4 | 6.0 | 2.8 | 3.2 | | share2b | 0.1 | 1.5 | 1.0 | 0.6 | 0.6 | | shell | 1.0 | 39.5 | 24.0 | 11.8 | 12.7 | | ship04l | 1.0 | 24.2 | 16.0 | 9.6 | 7.5 | | ship04s | 0.1 | 20.2 | 12.0 | 10.2 | 5.9 | | ship08l | 4.1 | 94.8 | 54.0 | 26.8 | 30.0 | | ship08s | 3.1 | 56.8 | 31.0 | 15.0 | 16.5 | | ship12l | 7.0 | 170.6 | 100.0 | 45.8 | 47.4 | | ship12s | 4.1 | 108.5 | 66.0 | 29.6 | 30.0 | | sierra | 3.0 | 72.6 | 44.0 | 20.9 | 22.0 | | stair | 2.1 | 54.2 | 40.0 | 18.2 | 18.7 | | standata | 0.0 | 3.1 | 3.0 | 1.1 | 1.1 | | standmps | 0.0 | 16.4 | 10.0 | 4.7 | 5.5 | | stocfor1 | 0.1 | 3.1 | 1.0 | 0.6 | 0.7 | | stocfor2 | 16.1 | 335.9 | 231.0 | 113.9 | 113.7 | | tuff | 1.0 | 32.9 | 21.0 | 10.6 | 11.3 | | vtp.base | 0.1 | 7.2 | 5.0 | 2.9 | 2.6 | | wood1p | 5.1 | 134.0 | 106.0 | 43.7 | 41.7 | | woodw | 22.0 | 440.5 | 293.0 | 162.6 | 157.6 |
Applications
- Factoriolab (Angular-based calculator for factory games like Factorio and Dyson Sphere Program)
Let me know if you are planning to use glpk-ts
for your application.
Coverage report
You can find the report here.