IGAOS — Indigenous GPU-Accelerated Optimization Solver
A sovereign LP / MILP / QP solver core built from mathematical foundations for SIH 2026 problem statement SIH26119 (MRPL): revised simplex (primal + dual), first-order GPU methods (PDHG), branch-and-bound with Gomory cuts, and ADMM QP — no existing optimization-solver library as a base.
- Wayfinder map: issue #1
- Problem-statement analysis:
docs/SIH26119-RESEARCH-REPORT.md - Research sheets:
docs/research/(PDHG algorithm · simplex design · benchmark protocol · refinery cases) - Dependency policy:
docs/DEPENDENCIES.md· vocabulary:CONTEXT.md
Layout
src/
common/ shared types, numerics utilities
linalg/ sparse/dense linear algebra; swappable CPU/GPU backends
simplex/ revised simplex (primal + dual, eta updates, warm starts)
pdhg/ first-order GPU LP engine
milp/ branch-and-bound + Gomory cuts
qp/ OSQP-style ADMM QP engine
io/ MPS reader (LP/MILP/QP), solution writers
api/ CLI + pybind11 surface
python/ Python bindings: igaos.solve() / igaos.read_mps()
benchmarks/ harness per docs/research/benchmark-protocol.md
tests/ assert-based engine smoke tests
Install
Python package (CPU engines — simplex LP, MILP, QP):
pip install igaos
import igaos
sol = igaos.solve("model.mps", time_limit=60, engine="auto")
sol.status, sol.objective, sol.x
With the GPU PDHG engine, build from source on a machine with the CUDA toolkit (auto-detected when nvcc is present):
pip install igaos --no-binary igaos --config-settings=cmake.define.IGAOS_ENABLE_CUDA=ON
Build from source (CLI + tests)
cmake -S . -B build
cmake --build build
Builds CPU-only automatically when no CUDA toolchain is present (the PDHG
engine requires CUDA). The CLI binary is build/src/api/igaos; the Python
module lands in python/igaos/. Engine tests: ctest --test-dir build.
Solve
$ ./build/src/api/igaos solve model.mps --engine auto --time-limit 60
{
"instance": "model.mps",
"status": "optimal",
"objective": -464.7531429,
...
}
Engines: auto | simplex | pdhg | milp | qp. All four engine classes are
live and verified against pinned baselines — current scores: Netlib
52/64 exact vs HiGHS, MIPLIB starters 6/20 @1e-4, robustness suite
10/15 per-class gates, Haverly QP three-way verified. Details and
honest failure records: docs/research/.
Python:
import igaos
sol = igaos.solve("model.mps", time_limit=60, engine="milp")
sol.status, sol.objective, sol.x
Metadata
Release files for igaos 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| igaos-0.1.0.tar.gz | 1.3 MB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| igaos-0.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | CPython 3.13 | CPython 3.13 | Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 | Details |
| igaos-0.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | CPython 3.12 | CPython 3.12 | Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 | Details |
| igaos-0.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | CPython 3.11 | CPython 3.11 | Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 | Details |
| igaos-0.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | CPython 3.10 | CPython 3.10 | Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 | Details |
| igaos-0.1.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | CPython 3.9 | CPython 3.9 | Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 | Details |
Total release size: 2.6 MB
Release files / igaos-0.1.0.tar.gz
| Download URL | igaos-0.1.0.tar.gz |
|---|---|
| Size | 1.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0da0f182067a710a4a1a0c40818fdefbdaa26aba2129d0b3f23a737494a6ed19
|
|
BLAKE2b-256 checksum How to use checksums |
fc5582ce485542981bce80517197bfdaee845041b4014376074e354224b6e967
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / igaos-0.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | igaos-0.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 254.5 kB |
| Tags | CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
6a285411fb5e4db4a2e16c927b24cb5b3daa66ff8f1ec1aee10a3c95677c58d5
|
|
BLAKE2b-256 checksum How to use checksums |
dbe980f5d2a74a06e4902e3e1af1a606bd88a25b5b50baefccf816515a9462bf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / igaos-0.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | igaos-0.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 254.4 kB |
| Tags | CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
f0b21bee18e4c81dc071391c354c83db51b6b82605c12ca4082343efb4461795
|
|
BLAKE2b-256 checksum How to use checksums |
cb77d1b8adef6e18b1f20cadf9596d1e0953f25b327ab3cceaf56d1c967909d0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / igaos-0.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | igaos-0.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 252.6 kB |
| Tags | CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
c3ec06eb87267f03dae46945336613b51ea13cd845a3fc6badef2b54d732e07c
|
|
BLAKE2b-256 checksum How to use checksums |
15611a4c531469b73bb43f7a5c793614666f1ade9fb3b7c192a27d41765d1603
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / igaos-0.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | igaos-0.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 251.8 kB |
| Tags | CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
6c780b523f46983a83e42c6c9e05502f7ba1ee8d1d034ae533a59145c311e7d2
|
|
BLAKE2b-256 checksum How to use checksums |
230837b6556f00e0669dd44beb714810e85b6317545759f550b696712ddd69c7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / igaos-0.1.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | igaos-0.1.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 252.1 kB |
| Tags | CPython 3.9 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
1a3c4a1e42842a98e15a82580b84df3568805a673ec91f63df0bf5a75a72f7a3
|
|
BLAKE2b-256 checksum How to use checksums |
b170b8d6151c69849ab12d23a01252d92545602a011c45c752cdb50210de8e06
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|