Transcript Slide 1

Coin LP
A Status Report
John Forrest
IBM Research
Goals for CLP





"... and my target would be to provide a solver which is no slower
than a factor of 5 when compared to the best available simplex
solvers. I would not aim for much better than that as the coding c
get ugly." (April 26, 2002)
make it available under the Common Public License
have the solver be as reliable as any commercially available solv
reasonably modular
first release July 30, 2002
Features






Dual Simplex, Primal Simplex - Quadratic to come.
Single phase method using weighted components (but not using
heuristic to make more efficient (later)).
Abstract class for pivot choice - relatively easy for user to create
own.
Abstract class for matrix storage - easy for user to create own could even do column generation or dynamic matrices.
Network matrix storage and factorization.
May extend to ClpInterior in future.
Speed





Abstract matrix class and abstract pivot class make for slower cod
(especially in Primal).
Abstract matrix class means that there can not be tight coupling f
network problems - but there is flexibility.
Aimed at large sparse problems - never touch a zero!
Only version 0.98.5
Needs more pricing flexibility in Primal
Osl
Iterations
Time
Osl network Clp
10057
13747
11.81
0.27
Clp network
3293
3524
28.89
10.26
Changes since first release






Presolve (Vernon Austel - tweaked by
me). Now moved to Coin so other
solvers can use.
Aggressive use of perturbation
Tuning and advanced solutions,
especially for large problems
Still no partial pricing in primal
OSL withdrawn from marketing on
Tuesday
All numbers based on runs done on
1.7Ghz ThinkPad Linux gcc 3.2
 clp "file" or
 clp
"file" -primalsimplex
500
450
400
350
300
OSL
Clp then
Clp now
250
200
150
100
50
0
unitTest
Primal/no
Dual/no
Netlib comparisons
(Primal)
600
500
400
Glpk 4.0
Osl 3
Cplex 8.1
Clp 0.98.5
300
200
100
0
netlib
maros-r7
pilot
pilot87
d2q06c
dfl001
fit2d
fit2p
Netlib comparisons
(Dual)
600
500
400
Glpk
Osl
Cplex
Clp
300
200
100
0
netlib
maros-r7
pilot
pilot87
d2q06c
dfl001
fit2d
fit2p
First Mittelmann test set
(without nug15 and qap15)
Rows
baxter
dano3mip
dbir2
dfl001
fit2p
fome12
gen4
ken-18
l30
lp22
mod2
nsct2
nug12
nw04
nw14
osa-60
pds-20
pds-40
pilot87
qap12
rlfprim
route
self
seymour
sgpf5y6
storm-125
Columns
27441
3202
18906
6071
3000
24284
1537
105127
2701
2958
34774
23003
3192
36
73
10280
33874
66844
2030
3192
58866
20894
960
4944
246077
66185
Elements
15128
13873
27355
12230
13525
48920
4297
154699
15380
13434
31728
14981
8856
87482
123409
232966
105728
212859
4883
8856
8052
23923
7364
1372
308634
157496
95971
79655
1139637
35632
50284
145528
107102
358171
51169
65560
165129
675156
38304
636666
904910
1397793
230200
462128
73152
38304
265927
187686
1148845
33549
828070
418321
Importance of Presolve



Modern modelers expect Presolve to do a lot of work
Capability and speed important in Presolve
Problem sgpf5y6 looks large
246,077 rows
308,634 columns
828,070 elements
glpk
Rows
Columns
Elements
Time
Pre/Post time
osl
143546
170888
465756
2869
?
clp
19499
81995
256439
50.7
15.3
cplex
19499
19499
39029
39020
109256
109247
55.0
4.5
36.4!
2.6
Primal comparisons on Mittelmann test set 1
(28 problems)
Glpk / Clp
Osl /
Clp
12
12
10
10
8
8
<
<
<
<
6
4
1 hour
10 minutes
1 minutes
10 seconds
6
4
2
2
O
SL
>
SL 2
0
O > 0%
SL 1
5
> 0%
1
SA 10%
C
lp ME
C > 1 **
lp 1
C > 1 0%
lp
C > 50%
lp 2
> 00
10 %
00
%
0
O
Glpk failed
Clp > 1000%
Clp > 200%
Clp >150%
Clp > 110%
SAME **
Glpk >110%
Glpk > 150%
0
<
<
<
<
1 hour
10 minutes
1 minutes
10 seconds
SL
>
SL 2
0
O > 0%
SL 1
5
> 0%
1
SA 10%
C
lp M
E
C > 1 **
lp 1
0
C >1 %
lp
C > 50%
lp 2
> 00
10 %
00
%
O
6
O
Glpk failed
Clp >10000%
Clp > 1000%
Clp > 200%
Clp >150%
Clp > 110%
SAME **
Glpk >110%
Glpk > 150%
Dual comparisons on Mittelmann test set 1
(28 problems)
Glpk **/ Clp
Osl /
Clp
12
9
10
8
7
8
6
< 10 minutes
< 1 minutes
< 10 seconds
5
4
4
3
2
2
1
0
0
< 10 minutes
< 1 minutes
< 10 seconds
Large ? small? Primal ? Dual ?
rows
columns
nonzeros
pilot87
2030
4883
7315
ken-18
105127
154699
35817
iters
pilot 87 (P)
glpk
6512
iters
49
(D) dual
ken-18 (P)
(D) dual
106319
6842
osl
iters
clp
iters
cplex
6679
22.9
7045
41.8
9746
29.8
11257
54.8
9112
43.7
10532
39.5
225468 544.4
11257
54.8
86136 249.8
9112
43.7
108988 122.4
49781
23.4
>
SL 2
0
O > 0%
SL 1
5
> 0%
1
SA 10%
C
lp M
E
C > 1 **
lp 1
0
C >1 %
lp
C > 50%
lp 2
> 00
10 %
00
%
O
6
<
<
<
<
SL
>
SL 2
0
O > 0%
SL 1
5
> 0%
1
SA 10%
C
lp ME
C > 1 **
lp 1
C > 1 0%
lp
C > 50%
lp 2
> 00
10 %
00
%
8
O
SL
O
O
Comparisons on Mittelmann test set 1
(Osl against Clp)
Primal
D
ual
12
9
10
8
7
1 hour
10 minutes
1 minutes
10 seconds
6
5
4
4
3
2
2
1
0
0
< 10 minutes
< 1 minutes
< 10 seconds
To do with Clp






Investigate Primal Simplex performance issues
Improve performance on small problems
Investigate dual infeasibilities after postsolve
More stress testing
Go to Version 1.00 and declare victory
... then back to Simple Branch and Bound
To do with Clp








Investigate Primal Simplex performance issues
Improve performance on small problems
Investigate dual infeasibilities after postsolve
More stress testing
Go to Version 1.00 and declare victory
... then back to Simple Branch and Bound
"... and my target would be to provide a solver which is no slower
than a factor of 5 when compared to the best available simplex
solvers."
... has Clp met its goals?
Cplex/ Clp comparisons on Mittelmann test set 1
(28 problems)
Primal
D
ual
9
7
8
6
7
5
6
5
4
<
<
<
<
1 hour
10 minutes
1 minutes
10 seconds
4
3
3
2
2
1
1
C
pl
ex
>
pl 100
ex
0
> %
C
pl
2
ex 00
> %
C 11
lp
0
> %
C 11
lp
0%
>
C
lp 200
>
%
10
00
%
0
C
C
C
pl
ex
>
pl 100
ex
0
> %
C
pl
2
ex 00
> %
C 11
lp
0
> %
C 11
lp
0%
>
C
lp 200
>
%
10
00
%
0
< 10 minutes
< 1 minutes
< 10 seconds
Second Mittelmann test set
(includes nug15,20 and qap15)
Rows
dano3mip
dbic1
dfl001
fome12
fome13
gen4
ken-18
l30
lp22
mod2
neos
neos1
neos2
neos3
nsct2
nug15
nug20
pds-40
pds-100
qap12
qap15
rail4284
rlfprim
sgpf5y6
storm-125
storm-1000
Columns
3202
43200
6071
24284
48568
1537
105127
2701
2958
34774
479119
131581
132568
132568
23003
6330
15240
66844
156243
3192
6330
4284
58866
246077
66185
528185
Elements
13873
183235
12230
48920
97840
4297
154699
15380
13434
31728
36786
1892
1560
1560
14981
22275
72600
212859
505360
8856
22275
1092610
8052
308634
157496
1259121
79655
1038761
35632
145528
285056
107102
358171
51169
65560
165129
1047675
468009
552519
552519
675156
94950
304800
462128
1086785
38304
94950
11279748
265927
828070
418321
3341696
>
**
*
D
N
F
%
50
0%
20
0%
15
0%
12
0%
11
0%
e
10
00
>
>
>
>
>
C
pl
ex
lp
C
lp
C
lp
C
lp
C
lp
C
lp
C
10
%
>1
20
%
>1
50
%
20
0%
>1
>
50
0%
Sa
m
pl
ex
C
pl
ex
C
pl
ex
C
pl
ex
C
%
10
00
>
>
pl
ex
C
ex
pl
C
Primal Cplex - Clp comparison
(Second Mittelmann test set)
8
7
6
5
4
3
>
<
<
<
<
2
1
0
1 hour
1 hour
10 minutes
1 minutes
10 seconds
>
**
*
D
N
F
%
50
0%
20
0%
15
0%
12
0%
11
0%
e
10
00
>
>
>
>
>
C
pl
ex
lp
C
lp
C
lp
C
lp
C
lp
C
lp
C
10
%
>1
20
%
>1
50
%
20
0%
>1
>
50
0%
Sa
m
pl
ex
C
pl
ex
C
pl
ex
C
pl
ex
C
%
10
00
>
>
pl
ex
C
ex
pl
C
Dual Cplex - Clp comparison
(Second Mittelmann test set)
6
5
4
3
2
>
<
<
<
<
1
0
1 hour
1 hour
10 minutes
1 minutes
10 seconds
Large ? small? Primal ? Dual ?
rows
neos3
nug20
stormG2_1000
watson_2
Cplex primal
iters
neos3
nug20
time
89186
columns
nonzeros
132568
1560
552519
15240
72600
304800
528185
1259121
3341696
352013
671861
1841028
Cplex dual
iters
7446
long
Clp primal
time
42805
iters
6930
long
Clp dual
time
iters
time
5726
322
5501
355
200049
17776
204833
17831
stormG2
824851
16538
582408
3180
1344966
47586
557884
2741
watson
193052
1486
173247
307
471995
6609
203932
267
>
**
*
D
N
F
%
50
0%
20
0%
15
0%
12
0%
11
0%
e
10
00
>
>
>
>
>
C
pl
ex
lp
C
lp
C
lp
C
lp
C
lp
C
lp
C
10
%
>1
20
%
>1
50
%
20
0%
>1
>
50
0%
Sa
m
pl
ex
C
pl
ex
C
pl
ex
C
pl
ex
C
%
10
00
>
>
pl
ex
C
ex
pl
C
Primal Cplex - Clp comparison
(problems added to test set)
7
6
5
4
3
> 1 hour
< 1 hour
< 10 minutes
2
1
0
>
**
*
D
N
F
%
50
0%
20
0%
15
0%
12
0%
11
0%
e
10
00
>
>
>
>
>
C
pl
ex
lp
C
lp
C
lp
C
lp
C
lp
C
lp
C
10
%
>1
20
%
>1
50
%
20
0%
>1
>
50
0%
Sa
m
pl
ex
C
pl
ex
C
pl
ex
C
pl
ex
C
%
10
00
>
>
pl
ex
C
ex
pl
C
Dual Cplex - Clp comparison
(problems added to test set)
3.5
3
2.5
2
1.5
> 1 hour
< 1 hour
< 10 minutes
1
0.5
0
To do with Clp









Investigate Primal Simplex performance issues
More stress testing
Still more to be done on Presolve (and speed)
Improve performance on small problems
Investigate dual infeasibilities after postsolve
Go to Version 1.00 and declare victory
... then back to Simple Branch and Bound
"... and my target would be to provide a solver which is no slower than a facto
5 when compared to the best available simplex solvers."
... has Clp met its goals?