- 📝 Table of Contents
- Purpose
- How to Use MatProGo
- The Mathematical Programming Universe
- What's next?
- Support
This organization is focused on centralizing some of the tools used to perform Mathematical Programming (e.g., Convex Optimization) in the Go (Golang) language. It aims to create a universal interface for defining optimization problems (like YALMIP) and to share simple wrappers that solve those optimization problems with arbitrary solvers (e.g., Gurobi).
The steps for making use of MatProGo's work should be as follows:
- For your Go project, get the MatProInterface.go module.
- Define your optimization problem using the symbolic math tools in this library (i.e., create the expressions, constraints and objective and attach them to a model).
- For your desired problem type, get the appropriate MatProInterface wrapper (e.g. Gurobi.go) module.
- Use the wrapper to solve the model created in Step 2.
So far, we've noticed the following options available to Go users that are interested in solving Mathematical Programming problems:
Each solver is typically designed for a specific class of problem (e.g., a Quadratic Program). We describe the capabilities of each library with the following table:
Problem Type | Solvers |
---|---|
Linear Programs (LPs) | Gurobi, Gonum, Mosek, OSQP |
Mixed Integer Linear Programs (MILPs) | Gurobi, Mosek |
Quadratic Programs (QPs) | Gurobi, OSQP, Mosek |
Second-Order Cone Programs (SOCPs) | Mosek |
We are currently writing our symbolic math toolbox to make it easy to create optimization problems in Go and have focused a lot of energy there. If you have features that you would like to see in that symbolic math solver or if you have a request for a certain wrapper, then please let us know about this!
If you want to support the work that is being done in MatProGo, then feel free to:
- Offer To Help Address A Bug (via a GitHub issue)
- Volunteer to Join the Organization
- Financially Support Us Through Our GitHub Sponsors Page