A Python desktop application that solves the Optimal Samples Selection combinatorial optimization problem via Integer Linear Programming (ILP), with a PyQt5 GUI and SQLite result storage.
- User Manual:
docs/User_Manual.md - Project Report:
docs/Project_Report.md
-
(Recommended) Create and activate a virtual environment.
-
Install dependencies:
pip3 install -r requirements.txt
-
Run the GUI:
python3 main.py
Alternatively:
./run.shcore/: optimization solver (ILP / OR-Tools)gui/: PyQt5 desktop UIdatabase/: SQLite persistenceresults/: saved.dbresult filesdocs/: documentation
The application uses results/known_covers.sqlite as a reusable cache for:
- La Jolla Covering Repository standard covers
C(v,k,t)whens == j. - Previously solved project instances
(n,k,j,s)mapped onto canonical samples1..n.
To refresh the La Jolla cache for the assignment parameter range:
python3 scripts/import_ljcr_covers.py --min-v 7 --max-v 25 --min-k 4 --max-k 7 --min-t 3 --max-t 7Cached La Jolla results are returned directly only when they are proven optimal. Otherwise they are used as feasible upper bounds / solver hints.
The GUI estimates the optimized coverage-entry count before starting an exact local solve. Instead of checking every j-subset against every k-group, the solver generates only the j-subsets each k-group can actually cover. If the estimate is too large, it avoids constructing the full model to prevent freezes or crashes. In that case, it returns a cached cover when available, or asks the user to reduce the parameters.
- Source:
mobile/ - Notes: offline exact solving (Branch-and-Bound) can be slow for larger
n. - Build instructions:
mobile/README.md
- Packaging scripts:
packaging/windows/ - CI workflow:
.github/workflows/windows-installer.yml(PyInstaller + Inno Setup)