Skip to content

Commit 8dd3fbb

Browse files
authored
Update README.md
Made the cuPDLP-C termination comments more prominent in the `README`, and extended them
1 parent cbb8c65 commit 8dd3fbb

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

src/pdlp/cupdlp/README.md

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,18 @@
22

33
This directory contains files from [cuPDLP-C v0.3.0](https://github.com/COPT-Public/cuPDLP-C/tree/v0.3.0). Below are some issues experienced when integrating them into HiGHS.
44

5+
## Termination of cuPDLP-C
6+
7+
cuPDLP-C terminates when either the current or averaged iterates satisfy primal/dual feasibility, using a 2-norm measure relative to the size of the RHS/costs, and after scaling the LP.
8+
9+
HiGHS assesses primal/dual feasibility using a infinity-norm absolute measure for the unscaled LP. Thus the cuPDLP-C result frequently fails to satisfy HiGHS primal/dual feasibility. To get around this partially, `iInfNormAbsLocalTermination` has been introduced into cuPDLP-C.
10+
11+
By default, `iInfNormAbsLocalTermination` is false, so that the original cuPDLP-C termination criteria are used.
12+
13+
When `iInfNormAbsLocalTermination` is true, cuPDLP-C terminates only when primal/dual feasibility is satisfied for the infinity-norm absolute measure of the current iterate, so that HiGHS primal/dual feasibility is satisfied.
14+
15+
However, the cuPDLP-C scaling may still result in the HiGHS tolerances not being satisfied. Users can inspect `HighsInfo` values for the maximum and sum of infeasibilities, and the new `HighsInfo` values measuring the maximum and sum of complementarity violations.
16+
517
## Preprocessing issue
618

719
The following line is not recognised by g++,
@@ -66,14 +78,6 @@ In HiGHS, all the macros using `typeof` have been replaced by multiple type-spec
6678

6779
The HiGHS branch add-pdlp compiles and runs fine on @jajhall's Linux machine, but CI tests on GitHub fail utterly due to `sys/time.h` not being found. Until this is fixed, or HiGHS passes its own timer for use within `cuPDLP-c`, timing within `cuPDLP-c` can be disabled using the compiler directive `CUPDLP_TIMER`. By default this is defined, so the `cuPDLP-c` is retained.
6880

69-
## Termination of cuPDLP-C
70-
71-
cuPDLP-C terminates when either the current or averaged iterates satisfy primal/dual feasibility, using a 2-norm measure relative to the size of the RHS/costs. HiGHS assesses primal/dual feasibility using a infinity-norm absolute measure. Thus the cuPDLP-C result frequently fails to satisfy HiGHS primal/dual feasibility. To get around this, `iInfNormAbsLocalTermination` has been introduced into cuPDLP-C.
72-
73-
By default, `iInfNormAbsLocalTermination` is false, so that the original cuPDLP-C termination criteria are used.
74-
75-
When `iInfNormAbsLocalTermination` is true, cuPDLP-C terminates only when primal/dual feasibility is satisfied for the infinity-norm absolute measure of the current iterate, so that HiGHS primal/dual feasibility is satisfied.
76-
7781
## Controlling the `cuPDLP-c` logging
7882

7983
As a research code, `cuPDLP-c` naturally produces a lot of logging output. HiGHS must be able to run with less logging output, or completely silently. This is achieved using the `nLogLevel` parameter in `cuPDLP-c`.

0 commit comments

Comments
 (0)