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?