Hi everyone, I want to share with the Julia community lpviz.net, a visualization web-app for linear programming solvers. Basically, I’ve implemented some textbook LP algorithms and hooked them up to an HTML canvas so you can draw the polytope, then see the iterates.
I’m posting here in Offtopic since lpviz is (unfortunately) not a Julia code, though I figured the optimization community here might enjoy playing around with it . The initial version was actually using Julia, but since I don’t want to pay for server costs (and I couldn’t figure out how to use Julia+WASM), I translated it all so it can be a static web app, re-implementing all the solvers using Typescript (cursed, I know!)
I’m happy to share there are some nice new features in lpviz.net! It should feel much faster now, thanks to Three.js integration and running the solvers on a separate thread. You can also now drag constraints and vertices, in addition to the objective, even in 3D mode. Mobile support (in landscape if on a phone) is slightly better too.
We’ve just released lpviz 1.0, along with a short preprint! There are a bunch of improvements since my last post – performance is much better for both the solvers and rendering, proper portrait/touch-screen support for mobile, Halpern iteration and basis identification coloring for the PDHG solvers, a total re-organization of the source code, and more.
I’m pleased to share that a short paper describing lpviz has been accepted to IEEE VIS’26! Also, since my last update here, we’ve shipped more performance improvements as well as some minor UX changes.
There is also a 3-variable mode in-progress. It’s not yet on the proper lpviz.net, but you can try it out at this beta link: lpviz: Visualize linear programming. I think it’s quite nice to see how IPM tends to first converge to a face, then an edge, and finally a vertex; and watching PDHG find then spiral around an edge towards the optimal vertex is also quite satisfying in 3D
As always happy to get feedback, especially for the 3-variable mode. In particular, I’m struggling to figure out the problem specification UX in that case, currently it is quite unintuitive/clumsy. You currently have to draw the base, then extrude, then use the modification tools (double-click on vertices/edges/faces) to make more complex feasible regions.