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
ENDATA

Solver Configuration

ParameterTypeDefaultDescription
backendstring"cpu"Execution backend ("cpu" or "cuda").
algorithmstring"auto"Solver algorithm ("pdhg", "simplex", "branch_bound", "auto").
tolerancefloat1e-6Convergence tolerance for residuals and duality gap.
maxIterationsinteger100000Maximum allowable iterations before termination.
precisionstring"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 / ComponentStatus
MPS ParserImplemented
LP Solver (PDHG)Implemented
QP SolverImplemented
MILP (Branch & Bound)Implemented
PresolveImplemented
Ruiz ScalingImplemented
KKT ValidationImplemented
CUDA AccelerationImplemented
Python BindingsIn Development
REST APIPlanned
Web AssemblyPlanned