From 87238356404039ad49c63230b82901e80698a71c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Schnabel?= Date: Mon, 20 Oct 2025 12:36:41 +0200 Subject: [PATCH 01/16] Fix cuopt 25.10 pip install spell and name env cu12 for CUDA12 [skip ci] --- .github/workflows/main.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 43bd428..202b2b6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -24,10 +24,10 @@ jobs: - name: Set up python virtual environment with NVIDIA dependencies run: | mkdir -p venvs - python -m venv venvs/cu-opt - bash -c "source venvs/cu-opt/bin/activate && \ + python -m venv venvs/cu12 + bash -c "source venvs/cu12/bin/activate && \ pip install --upgrade pip -qq && \ - pip install --extra-index-url=https://pypi.anaconda.org/rapidsai-wheels-nightly/simple/ cuopt-cu12==25.10.0a47 nvidia-cuda-runtime-cu12==12.8.* nvidia-nvjitlink-cu12 -qq" + pip install --extra-index-url=https://pypi.anaconda.org/rapidsai-wheels-nightly/simple/ cuopt-cu12==25.10.0 nvidia-cuda-runtime-cu12==12.8.* nvidia-nvjitlink-cu12 -qq" - name: Download and extract latest GAMS distribution run: | @@ -39,8 +39,8 @@ jobs: - name: Compile gmscuopt run: | export GAMSCAPI="gamsdist/apifiles/C/api" - export CUOPT="venvs/cu-opt/lib/python3.12/site-packages/libcuopt" - export JITLINK="venvs/cu-opt/lib/python3.12/site-packages/nvidia/nvjitlink/lib" + export CUOPT="venvs/cu12/lib/python3.12/site-packages/libcuopt" + export JITLINK="venvs/cu12/lib/python3.12/site-packages/nvidia/nvjitlink/lib" gcc -Wall gmscuopt.c -o gmscuopt.out \ -I $GAMSCAPI $GAMSCAPI/gmomcc.c $GAMSCAPI/optcc.c $GAMSCAPI/gevmcc.c \ -I $CUOPT/include $JITLINK/libnvJitLink.so.12 -L $CUOPT/lib64 -lcuopt @@ -51,11 +51,11 @@ jobs: mkdir release cp gmscuopt.out release/ cp assets/* release/ - cp venvs/cu-opt/lib/python3.12/site-packages/libcuopt/lib64/libcuopt.so release/ - cp venvs/cu-opt/lib/python3.12/site-packages/libcuopt/lib64/libmps_parser.so release/ - cp venvs/cu-opt/lib/python3.12/site-packages/libcuopt_cu12.libs/libgomp-5fc1ad8c.so.1.0.0 release/ - cp venvs/cu-opt/lib/python3.12/site-packages/rapids_logger/lib64/librapids_logger.so release/ - cp venvs/cu-opt/lib/python3.12/site-packages/librmm/lib64/librmm.so release/ + cp venvs/cu12/lib/python3.12/site-packages/libcuopt/lib64/libcuopt.so release/ + cp venvs/cu12/lib/python3.12/site-packages/libcuopt/lib64/libmps_parser.so release/ + cp venvs/cu12/lib/python3.12/site-packages/libcuopt_cu12.libs/libgomp-5fc1ad8c.so.1.0.0 release/ + cp venvs/cu12/lib/python3.12/site-packages/rapids_logger/lib64/librapids_logger.so release/ + cp venvs/cu12/lib/python3.12/site-packages/librmm/lib64/librmm.so release/ - name: Upload artifact to GitHub Actions (always) uses: actions/upload-artifact@v4 From 17b9b242be21b7bc86338dbfd197cdc37103311c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Schnabel?= Date: Mon, 20 Oct 2025 12:46:58 +0200 Subject: [PATCH 02/16] Add CUOPT version and hash exports in workflow [skip ci] --- .github/workflows/main.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 202b2b6..faf58c8 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -41,7 +41,10 @@ jobs: export GAMSCAPI="gamsdist/apifiles/C/api" export CUOPT="venvs/cu12/lib/python3.12/site-packages/libcuopt" export JITLINK="venvs/cu12/lib/python3.12/site-packages/nvidia/nvjitlink/lib" + export CUOPT_VERSION=`cat $CUOPT/VERSION` + export CUOPT_HASH=`cat $CUOPT/GIT_COMMIT` gcc -Wall gmscuopt.c -o gmscuopt.out \ + -DCUOPT_VERSION=$CUOPT_VERSION -DCUOPT_HASH=$CUOPT_HASH \ -I $GAMSCAPI $GAMSCAPI/gmomcc.c $GAMSCAPI/optcc.c $GAMSCAPI/gevmcc.c \ -I $CUOPT/include $JITLINK/libnvJitLink.so.12 -L $CUOPT/lib64 -lcuopt patchelf --set-rpath \$ORIGIN gmscuopt.out From 14585d8c215f27914992afd9e5d65b66b85a07f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Schnabel?= Date: Mon, 20 Oct 2025 12:47:33 +0200 Subject: [PATCH 03/16] Update environment variable exports in workflow [skip ci] --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index faf58c8..7caa6e5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -41,8 +41,8 @@ jobs: export GAMSCAPI="gamsdist/apifiles/C/api" export CUOPT="venvs/cu12/lib/python3.12/site-packages/libcuopt" export JITLINK="venvs/cu12/lib/python3.12/site-packages/nvidia/nvjitlink/lib" - export CUOPT_VERSION=`cat $CUOPT/VERSION` - export CUOPT_HASH=`cat $CUOPT/GIT_COMMIT` + export CUOPT_VERSION="`cat $CUOPT/VERSION`" + export CUOPT_HASH="`cat $CUOPT/GIT_COMMIT`" gcc -Wall gmscuopt.c -o gmscuopt.out \ -DCUOPT_VERSION=$CUOPT_VERSION -DCUOPT_HASH=$CUOPT_HASH \ -I $GAMSCAPI $GAMSCAPI/gmomcc.c $GAMSCAPI/optcc.c $GAMSCAPI/gevmcc.c \ From fb16f63d76dc3401d9d757dc31c80a0db5e81a0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Schnabel?= Date: Mon, 20 Oct 2025 12:48:31 +0200 Subject: [PATCH 04/16] Fix export commands for CUOPT_VERSION and CUOPT_HASH [skip ci] --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7caa6e5..0bc1160 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -41,8 +41,8 @@ jobs: export GAMSCAPI="gamsdist/apifiles/C/api" export CUOPT="venvs/cu12/lib/python3.12/site-packages/libcuopt" export JITLINK="venvs/cu12/lib/python3.12/site-packages/nvidia/nvjitlink/lib" - export CUOPT_VERSION="`cat $CUOPT/VERSION`" - export CUOPT_HASH="`cat $CUOPT/GIT_COMMIT`" + export CUOPT_VERSION="`cat "$CUOPT/VERSION"`" + export CUOPT_HASH="`cat "$CUOPT/GIT_COMMIT"`" gcc -Wall gmscuopt.c -o gmscuopt.out \ -DCUOPT_VERSION=$CUOPT_VERSION -DCUOPT_HASH=$CUOPT_HASH \ -I $GAMSCAPI $GAMSCAPI/gmomcc.c $GAMSCAPI/optcc.c $GAMSCAPI/gevmcc.c \ From 1d21a7c72dd4d889434d7b51ea12dd655940e31d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Schnabel?= Date: Mon, 20 Oct 2025 12:51:13 +0200 Subject: [PATCH 05/16] Update library copy command to use wildcard for libgomp [skip ci] --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0bc1160..509ec03 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -56,7 +56,7 @@ jobs: cp assets/* release/ cp venvs/cu12/lib/python3.12/site-packages/libcuopt/lib64/libcuopt.so release/ cp venvs/cu12/lib/python3.12/site-packages/libcuopt/lib64/libmps_parser.so release/ - cp venvs/cu12/lib/python3.12/site-packages/libcuopt_cu12.libs/libgomp-5fc1ad8c.so.1.0.0 release/ + cp venvs/cu12/lib/python3.12/site-packages/libcuopt_cu12.libs/libgomp-*.so.1.0.0 release/ cp venvs/cu12/lib/python3.12/site-packages/rapids_logger/lib64/librapids_logger.so release/ cp venvs/cu12/lib/python3.12/site-packages/librmm/lib64/librmm.so release/ From fce75b3e6255b5ff70a5b8aed8598db0cac7008f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Schnabel?= Date: Mon, 20 Oct 2025 13:02:03 +0200 Subject: [PATCH 06/16] Added more library files to release [skip ci] --- .github/workflows/main.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 509ec03..27fccc3 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -59,6 +59,13 @@ jobs: cp venvs/cu12/lib/python3.12/site-packages/libcuopt_cu12.libs/libgomp-*.so.1.0.0 release/ cp venvs/cu12/lib/python3.12/site-packages/rapids_logger/lib64/librapids_logger.so release/ cp venvs/cu12/lib/python3.12/site-packages/librmm/lib64/librmm.so release/ + cp venvs/cu12/lib/python3.12/site-packages/nvidia/cu12/lib/libcudss.so.0 release/ + cp venvs/cu12/lib/python3.12/site-packages/libcuopt_cu12.libs/libtbb-*.so.2 release/ + cp venvs/cu12/lib/python3.12/site-packages/libcuopt_cu12.libs/libtbbmalloc-*.so.2 release/ + cp venvs/cu12/lib/python3.12/site-packages/nvidia/cusolver/lib/libcusolver.so.11 release/ + cp venvs/cu12/lib/python3.12/site-packages/nvidia/cublas/lib/libcublas.so.12 release/ + cp venvs/cu12/lib/python3.12/site-packages/nvidia/cublas/lib/libcublasLt.so.12 + cp venvs/cu12/lib/python3.12/site-packages/nvidia/nvjitlink/lib/libnvJitLink.so.12 release/ - name: Upload artifact to GitHub Actions (always) uses: actions/upload-artifact@v4 From 5b0cb5d5953aaf46391a1767cdc729a192c2bbd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Schnabel?= Date: Mon, 20 Oct 2025 13:02:51 +0200 Subject: [PATCH 07/16] Fix path for copying libcublasLt.so.12 in workflow [skip ci] --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 27fccc3..3d47364 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -64,7 +64,7 @@ jobs: cp venvs/cu12/lib/python3.12/site-packages/libcuopt_cu12.libs/libtbbmalloc-*.so.2 release/ cp venvs/cu12/lib/python3.12/site-packages/nvidia/cusolver/lib/libcusolver.so.11 release/ cp venvs/cu12/lib/python3.12/site-packages/nvidia/cublas/lib/libcublas.so.12 release/ - cp venvs/cu12/lib/python3.12/site-packages/nvidia/cublas/lib/libcublasLt.so.12 + cp venvs/cu12/lib/python3.12/site-packages/nvidia/cublas/lib/libcublasLt.so.12 release/ cp venvs/cu12/lib/python3.12/site-packages/nvidia/nvjitlink/lib/libnvJitLink.so.12 release/ - name: Upload artifact to GitHub Actions (always) From 0682e4b3f5c2e7e13fa915346fc729d2a44606bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Schnabel?= Date: Mon, 20 Oct 2025 13:34:58 +0200 Subject: [PATCH 08/16] Add version and hash printing for CUOPT [skip ci] --- gmscuopt.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/gmscuopt.c b/gmscuopt.c index 2a2480c..2c27f35 100644 --- a/gmscuopt.c +++ b/gmscuopt.c @@ -51,6 +51,10 @@ main (int argc, char *argv[]) goto GAMSDONE; } +#if defined(CUOPT_VERSION) && defined(CUOPT_HASH) + printOut(gev, "cuOpt version=%s (%s)\n", CUOPT_VERSION, CUOPT_HASH); +#endif + status = gmoRegisterEnvironment(gmo, gev, msg); if (status) { printOut(gev, "Could not register GEV: %s\n", msg); From 31f41eaba188091671f8ff7f10414beac37c52fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Schnabel?= Date: Mon, 20 Oct 2025 13:35:42 +0200 Subject: [PATCH 09/16] Fix quotes in gcc command for CUOPT_VERSION and CUOPT_HASH [skip ci] --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3d47364..7dcaa5c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -44,7 +44,7 @@ jobs: export CUOPT_VERSION="`cat "$CUOPT/VERSION"`" export CUOPT_HASH="`cat "$CUOPT/GIT_COMMIT"`" gcc -Wall gmscuopt.c -o gmscuopt.out \ - -DCUOPT_VERSION=$CUOPT_VERSION -DCUOPT_HASH=$CUOPT_HASH \ + -DCUOPT_VERSION="$CUOPT_VERSION" -DCUOPT_HASH="$CUOPT_HASH" \ -I $GAMSCAPI $GAMSCAPI/gmomcc.c $GAMSCAPI/optcc.c $GAMSCAPI/gevmcc.c \ -I $CUOPT/include $JITLINK/libnvJitLink.so.12 -L $CUOPT/lib64 -lcuopt patchelf --set-rpath \$ORIGIN gmscuopt.out From 754e950778b48b33b8902602bf936dfbd8176adb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Schnabel?= Date: Mon, 20 Oct 2025 14:43:41 +0200 Subject: [PATCH 10/16] Fix define for version and hash [skip ci] --- .github/workflows/main.yml | 2 +- .gitignore | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 .gitignore diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7dcaa5c..fd1320e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -44,7 +44,7 @@ jobs: export CUOPT_VERSION="`cat "$CUOPT/VERSION"`" export CUOPT_HASH="`cat "$CUOPT/GIT_COMMIT"`" gcc -Wall gmscuopt.c -o gmscuopt.out \ - -DCUOPT_VERSION="$CUOPT_VERSION" -DCUOPT_HASH="$CUOPT_HASH" \ + -DCUOPT_VERSION=\"$CUOPT_VERSION\" -DCUOPT_HASH=\"$CUOPT_HASH\" \ -I $GAMSCAPI $GAMSCAPI/gmomcc.c $GAMSCAPI/optcc.c $GAMSCAPI/gevmcc.c \ -I $CUOPT/include $JITLINK/libnvJitLink.so.12 -L $CUOPT/lib64 -lcuopt patchelf --set-rpath \$ORIGIN gmscuopt.out diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8778fce --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/venv/* \ No newline at end of file From b2bb1a0e6aa995a14a1c15e10589c6743fd652af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Schnabel?= Date: Mon, 20 Oct 2025 14:50:41 +0200 Subject: [PATCH 11/16] Add missing .so file to copy [skip ci] --- .github/workflows/main.yml | 1 + .gitignore | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index fd1320e..4c18c8b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -66,6 +66,7 @@ jobs: cp venvs/cu12/lib/python3.12/site-packages/nvidia/cublas/lib/libcublas.so.12 release/ cp venvs/cu12/lib/python3.12/site-packages/nvidia/cublas/lib/libcublasLt.so.12 release/ cp venvs/cu12/lib/python3.12/site-packages/nvidia/nvjitlink/lib/libnvJitLink.so.12 release/ + cp venvs/cu12/lib/python3.12/site-packages/nvidia/curand/lib/libcurand.so.10 release/ - name: Upload artifact to GitHub Actions (always) uses: actions/upload-artifact@v4 diff --git a/.gitignore b/.gitignore index 8778fce..6bd96bb 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,5 @@ -/venv/* \ No newline at end of file +/venv/* +/release/* +trnsport.gms +trnsport.lst +gmscuopt.out \ No newline at end of file From 89710e7eb058a2d95dc5301f4217a18a8bf887f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Schnabel?= Date: Mon, 20 Oct 2025 14:58:06 +0200 Subject: [PATCH 12/16] Modify cuopt link version message [skip ci] --- gmscuopt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gmscuopt.c b/gmscuopt.c index 2c27f35..6cf8d2e 100644 --- a/gmscuopt.c +++ b/gmscuopt.c @@ -52,7 +52,7 @@ main (int argc, char *argv[]) } #if defined(CUOPT_VERSION) && defined(CUOPT_HASH) - printOut(gev, "cuOpt version=%s (%s)\n", CUOPT_VERSION, CUOPT_HASH); + printOut(gev, "GAMS/cuOpt link was built against cuOpt version: %s, git hash: %s\n", CUOPT_VERSION, CUOPT_HASH); #endif status = gmoRegisterEnvironment(gmo, gev, msg); From ce560ab0758f77869931ea63818baac66b0c7071 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Schnabel?= Date: Mon, 20 Oct 2025 15:01:47 +0200 Subject: [PATCH 13/16] Update option definition [skip ci] --- assets/optcuopt.def | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/assets/optcuopt.def b/assets/optcuopt.def index 5ebae18..309fe04 100644 --- a/assets/optcuopt.def +++ b/assets/optcuopt.def @@ -5,15 +5,17 @@ presolve boolean 0 0 1 1 Controls whether presolve is enabled. Presolve can redu num_cpu_threads integer 0 -1 -1 maxint 1 1 Controls the number of CPU threads used in the LP and MIP solvers (default GAMS Threads) time_limit integer 0 maxint 0 maxint 1 1 Controls the time limit in seconds after which the solver will stop and return the current solution (default GAMS ResLim) prob_read string 1 "" 1 1 Reads a problem from an MPS file -pdlp_solver_mode enumint 0 1 1 2 Controls the mode under which PDLP should operate +pdlp_solver_mode enumint 0 1 1 4 Controls the mode under which PDLP should operate 0 1 stable1 1 1 stable2 - 2 1 methodical1 - 3 1 fast1 -method enumint 0 0 1 2 Controls the method to solve the linear programming problem + 2 1 stable3 + 3 1 methodical1 + 4 1 fast1 +method enumint 0 0 1 3 Controls the method to solve the linear programming problem 0 1 concurrent 1 1 pdlp 2 1 dual_simplex + 3 1 method_barrier iteration_limit integer 0 maxint 0 maxint 1 2 Controls the iteration limit after which the solver will stop and return the current solution (default GAMS IterLim) absolute_dual_tolerance double 0 0.0001 0 maxdouble 1 2 Controls the absolute dual tolerance used in PDLP's dual feasibility check relative_dual_tolerance double 0 0.0001 0 maxdouble 1 2 Controls the relative dual tolerance used in PDLP's dual feasibility check From 664d6e0620e590225fc5ec3954ff74dd64c925fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Schnabel?= Date: Mon, 20 Oct 2025 15:13:50 +0200 Subject: [PATCH 14/16] Adapt options once more [skip ci] --- .gitignore | 3 ++- assets/optcuopt.def | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 6bd96bb..6dadc6d 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ /release/* trnsport.gms trnsport.lst -gmscuopt.out \ No newline at end of file +gmscuopt.out +cuopt.opt \ No newline at end of file diff --git a/assets/optcuopt.def b/assets/optcuopt.def index 309fe04..8089026 100644 --- a/assets/optcuopt.def +++ b/assets/optcuopt.def @@ -5,13 +5,13 @@ presolve boolean 0 0 1 1 Controls whether presolve is enabled. Presolve can redu num_cpu_threads integer 0 -1 -1 maxint 1 1 Controls the number of CPU threads used in the LP and MIP solvers (default GAMS Threads) time_limit integer 0 maxint 0 maxint 1 1 Controls the time limit in seconds after which the solver will stop and return the current solution (default GAMS ResLim) prob_read string 1 "" 1 1 Reads a problem from an MPS file -pdlp_solver_mode enumint 0 1 1 4 Controls the mode under which PDLP should operate +pdlp_solver_mode enumint 0 1 1 2 Controls the mode under which PDLP should operate 0 1 stable1 1 1 stable2 2 1 stable3 3 1 methodical1 4 1 fast1 -method enumint 0 0 1 3 Controls the method to solve the linear programming problem +method enumint 0 0 1 2 Controls the method to solve the linear programming problem 0 1 concurrent 1 1 pdlp 2 1 dual_simplex @@ -38,6 +38,7 @@ mip_absolute_gap double 0 1e-10 0 maxdouble 1 3 Controls the absolute tolerance mip_relative_gap double 0 1e-5 0 maxdouble 1 3 Controls the relative tolerance used to terminate the MIP solve (default GAMS OptCR) mip_scaling boolean 0 1 1 3 Controls if scaling should be applied to the MIP problem mip_heuristics_only boolean 0 0 1 3 Controls if only the GPU heuristics should be run +barrier_dual_initial_point boolean 0 0 1 2 Controls the method used to compute the dual initial point for the barrier solver. The choice of initial point will affect the number of iterations performed by barrier * * Groups * From 7855cb84766749043d9d0eaa69e5664d0388eb5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Schnabel?= Date: Mon, 20 Oct 2025 15:40:51 +0200 Subject: [PATCH 15/16] More updates to option definition file [skip ci] --- assets/optcuopt.def | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/assets/optcuopt.def b/assets/optcuopt.def index 8089026..03fb10a 100644 --- a/assets/optcuopt.def +++ b/assets/optcuopt.def @@ -1,16 +1,17 @@ * * optcuopt.def * -presolve boolean 0 0 1 1 Controls whether presolve is enabled. Presolve can reduce problem size and improve solve time. Enabled by default for MIP, disabled by default for LP. +solution_file string 1 "" 1 1 Controls the name of a file where cuOpt should write the solution +user_problem_file string 1 "" 1 1 Controls the name of a file where cuOpt should write the user problem num_cpu_threads integer 0 -1 -1 maxint 1 1 Controls the number of CPU threads used in the LP and MIP solvers (default GAMS Threads) time_limit integer 0 maxint 0 maxint 1 1 Controls the time limit in seconds after which the solver will stop and return the current solution (default GAMS ResLim) prob_read string 1 "" 1 1 Reads a problem from an MPS file pdlp_solver_mode enumint 0 1 1 2 Controls the mode under which PDLP should operate 0 1 stable1 1 1 stable2 - 2 1 stable3 - 3 1 methodical1 - 4 1 fast1 + 2 1 methodical1 + 3 1 fast1 + 4 1 stable3 method enumint 0 0 1 2 Controls the method to solve the linear programming problem 0 1 concurrent 1 1 pdlp @@ -31,6 +32,27 @@ per_constraint_residual boolean 0 0 1 2 Controls whether PDLP should compute the save_best_primal_so_far boolean 0 0 1 2 Controls whether PDLP should save the best primal solution so far first_primal_feasible boolean 0 0 1 2 Controls whether PDLP should stop when the first primal feasible solution is found crossover boolean 0 0 1 2 Controls whether PDLP should crossover to a basic solution after an optimal solution is found +folding enumint -1 1 1 2 Controls whether to fold the linear program. Folding can reduce problem size by exploiting symmetry in the problem + -1 1 automatic (default) cuOpt decides whether to fold based on problem characteristics + 0 1 disable folding + 1 1 force folding to run +augmented enumint -1 1 1 2 Controls which linear system to solve in the barrier method + -1 1 automatic (default) cuOpt selects the best linear system to solve + 0 1 solve the ADAT system (normal equations) + 1 1 solve the augmented system +dualize enumint -1 1 1 2 Controls whether to dualize the linear program in presolve. Dualizing can improve solve time for problems, with inequality constraints, where there are more constraints than variables. + -1 1 automatic (default) cuOpt decides whether to dualize based on problem characteristics + 0 1 don't attempt to dualize + 1 1 force dualize +ordering enumint -1 1 1 2 Controls the ordering algorithm used by cuDSS for sparse factorizations. The ordering can significantly impact solver run time + -1 1 automatic (default) cuOpt selects the best ordering + 0 1 cuDSS default ordering + 1 1 AMD (approximate minimum degree) ordering +barrier_dual_initial_point boolean 0 0 1 2 Controls the method used to compute the dual initial point for the barrier solver. The choice of initial point will affect the number of iterations performed by barrier +eliminate_dense_columns boolean 1 0 1 2 Controls whether to eliminate dense columns from the constraint matrix before solving. Eliminating dense columns can improve performance by reducing fill-in during factorization. However, extra solves must be performed at each iteration +cudss_deterministic boolean 0 0 1 2 Controls whether cuDSS operates in deterministic mode. Deterministic mode ensures reproducible results across runs but may be slower +presolve boolean 0 0 1 1 Controls whether presolve is enabled. Presolve can reduce problem size and improve solve time. Enabled by default for MIP, disabled by default for LP. +dual_postsolve boolean 1 0 1 2 Controls whether dual postsolve is enabled. Disabling dual postsolve can improve solve time at the expense of not having access to the dual solution. Enabled by default for LP when presolve is enabled. This is not relevant for MIP problems mip_absolute_tolerance double 0 0.0001 0 maxdouble 1 3 Controls the MIP absolute tolerance mip_relative_tolerance double 0 0.0001 0 maxdouble 1 3 Controls the MIP relative tolerance mip_integrality_tolerance double 0 1e-05 0 maxdouble 1 3 Controls the MIP integrality tolerance @@ -38,7 +60,6 @@ mip_absolute_gap double 0 1e-10 0 maxdouble 1 3 Controls the absolute tolerance mip_relative_gap double 0 1e-5 0 maxdouble 1 3 Controls the relative tolerance used to terminate the MIP solve (default GAMS OptCR) mip_scaling boolean 0 1 1 3 Controls if scaling should be applied to the MIP problem mip_heuristics_only boolean 0 0 1 3 Controls if only the GPU heuristics should be run -barrier_dual_initial_point boolean 0 0 1 2 Controls the method used to compute the dual initial point for the barrier solver. The choice of initial point will affect the number of iterations performed by barrier * * Groups * From 4cfbefd1cbc197b410aeda254cf24c15ec4deb60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Schnabel?= Date: Mon, 20 Oct 2025 15:44:12 +0200 Subject: [PATCH 16/16] Update dual initial point def [skip ci] --- assets/optcuopt.def | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/assets/optcuopt.def b/assets/optcuopt.def index 03fb10a..25c15dd 100644 --- a/assets/optcuopt.def +++ b/assets/optcuopt.def @@ -48,7 +48,10 @@ ordering enumint -1 1 1 2 Controls the ordering algorithm used by cuDSS for spar -1 1 automatic (default) cuOpt selects the best ordering 0 1 cuDSS default ordering 1 1 AMD (approximate minimum degree) ordering -barrier_dual_initial_point boolean 0 0 1 2 Controls the method used to compute the dual initial point for the barrier solver. The choice of initial point will affect the number of iterations performed by barrier +barrier_dual_initial_point enumint -1 1 1 2 Controls the method used to compute the dual initial point for the barrier solver. The choice of initial point will affect the number of iterations performed by barrier + -1 1 automatic (default) cuOpt selects the best method + 0 1 use an initial point from a heuristic approach based on the paper "On Implementing Mehrotra’s Predictor–Corrector Interior-Point Method for Linear Programming" (SIAM J. Optimization, 1992) by Lustig, Martsten, Shanno. + 1 1 use an initial point from solving a least squares problem that minimizes the norms of the dual variables and reduced costs while statisfying the dual equality constraints. eliminate_dense_columns boolean 1 0 1 2 Controls whether to eliminate dense columns from the constraint matrix before solving. Eliminating dense columns can improve performance by reducing fill-in during factorization. However, extra solves must be performed at each iteration cudss_deterministic boolean 0 0 1 2 Controls whether cuDSS operates in deterministic mode. Deterministic mode ensures reproducible results across runs but may be slower presolve boolean 0 0 1 1 Controls whether presolve is enabled. Presolve can reduce problem size and improve solve time. Enabled by default for MIP, disabled by default for LP.