Documentation
Overview
The Indigenous Optimization Solver is a high-performance mathematical programming engine designed to solve Large-Scale Linear Programming (LP), Quadratic Programming (QP), and Mixed-Integer Linear Programming (MILP) problems. Utilizing modern algorithmic approaches such as the Primal-Dual Hybrid Gradient (PDHG) method, it leverages both multi-core CPUs and CUDA-enabled GPUs to accelerate solving times for industrial-scale models.
Model Formats
The solver currently supports the industry-standard Mathematical Programming System (MPS) format for model definitions.
NAME EXAMPLE
ROWS
N OBJ
L C1
L C2
COLUMNS
X1 OBJ 1.0 C1 1.0
X1 C2 2.0
RHS
RHS C1 10.0
RHS C2 20.0
BOUNDS
ENDATASolver Configuration
| Parameter | Type | Default | Description |
|---|---|---|---|
| backend | string | "cpu" | Execution backend ("cpu" or "cuda"). |
| algorithm | string | "auto" | Solver algorithm ("pdhg", "simplex", "branch_bound", "auto"). |
| tolerance | float | 1e-6 | Convergence tolerance for residuals and duality gap. |
| maxIterations | integer | 100000 | Maximum allowable iterations before termination. |
| precision | string | "double" | Floating point precision ("single" or "double"). |
API Reference
The primary integration point for the solver is its native C API (src/api/c_api.cpp). Language bindings (e.g., Python, WebAssembly) are currently in development.
// Create a solver instance void* solver_create(); // Load a model from an MPS file int solver_load_mps(void* solver, const char* filepath); // Configure solver parameters int solver_set_param(void* solver, const char* param, const char* value); // Execute the optimization process int solver_solve(void* solver); // Retrieve the objective value and solution vectors double solver_get_objective(void* solver); int solver_get_solution(void* solver, double* primal, double* dual); // Cleanup resources void solver_destroy(void* solver);
Note: The web-based Solver Studio interacts with this C API via native bindings in the backend service.
Building from Source
Building the core solver requires a C++17 compatible compiler and CMake. To enable CUDA acceleration, the NVIDIA CUDA Toolkit must be installed.
# Clone the repository git clone https://github.com/organization/solver-core.git cd solver-core # Create build directory mkdir build && cd build # Configure with CMake (auto-detects CUDA) cmake .. # Build the project make -j$(nproc)
Implementation Status
| Feature / Component | Status |
|---|---|
| MPS Parser | Implemented |
| LP Solver (PDHG) | Implemented |
| QP Solver | Implemented |
| MILP (Branch & Bound) | Implemented |
| Presolve | Implemented |
| Ruiz Scaling | Implemented |
| KKT Validation | Implemented |
| CUDA Acceleration | Implemented |
| Python Bindings | In Development |
| REST API | Planned |
| Web Assembly | Planned |