From robinlh at us.ibm.com Mon Feb 10 14:09:06 2003 From: robinlh at us.ibm.com (Robin Lougee-Heimer) Date: Wed Nov 24 00:04:11 2004 Subject: [Coin-contest] Cut generators etc Message-ID: >Now over to you Robin to discuss possible new cut generators. Two flavors of cuts come to mind: (1) established (to the point of being in commercial solvers) and (2) promising cuts in the literature (that aren't known to be used by commercial solvers). For Category 1, the ISMP2000 presentation of Zonghau Gu which reported experience on the impact of individual cuts on big test sets is a good reference point. I don't have his presentation, but this is similiar: http://faculty.smu.edu/barr/ip/01ipBixby.PDF. Cut Family Impact ---------- ------ Gomory 114% Covers 56%, MIR 56% Flow Covers 41% Disjunctive 17% GUB covers 14% Path 0% Implied -1% Cliques -3% (Keep in mind this is the impact of _individual_ cuts. Computational experience has shown that one type of cut can help another type of cut get a toe-hold in the problem, and these results don't report on the impact of cuts together.) COIN-OR already has Gomory and Knapsack Covers. (The COIN-OR Knapsack Cover Cuts aren't full-strenth. They need better lifting heurisitics, and they need capability to exploit other problem structure like SOS sets). Among the other candidates, the only one that might be appearing in COIN-OR soon are cliques. Marta Eso has implemented clique cuts and in the process of contributing them to COIN-OR. For Category 2: A google search on "miplib" and "cutting plane" gives eight pages of results (and that's only the tip of the iceberg). Here's are _some_ possibilities which interest me (insert here all possible caveats here about this list :-). Aggregation and Mixed Integer Rounding to Solve MIPs (1998) http://citeseer.nj.nec.com/marchand98aggregation.html The 0-1 knapsack problem with a single continous variable (1997) http://citeseer.nj.nec.com/marchand97knapsack.html Lift-and-project for mixed 0-1 programming: recent progress (1999) http://citeseer.nj.nec.com/balas99liftproject.html Cutting Planes for Integer Programs with General Integer Variables (1998) http://citeseer.nj.nec.com/ceria98cutting.html Additions and comments on this list are welcome. Robin PS: I came across these while I was surfing around. For your interst: Personal Perspective on the Future of Integer Programming (INFORMS2002) http://www.isye.gatech.edu/faculty/Martin_Savelsbergh/presentations/INFORMS111902.pdf Progress in LP-based, B&B algorithms: an exposition (circa 1998) http://www.isye.gatech.edu/faculty/Martin_Savelsbergh/publications/ijoc12a.pdf Preprocesssing and probing techniques for MIP problems http://www.isye.gatech.edu/faculty/Martin_Savelsbergh/publications/ojoc6.pdf Cutting planes in integer and mixed-integer programming (1999: survey w/o computatinal results) http://citeseer.nj.nec.com/marchand99cutting.html Cutting Plane Algorithms for Mixed Integer Programming http://www.zib.de/Optimization/index.en/node3.html#SECTION00042200000000000000 ---------------------------------------------------------------------------------- Robin Lougee-Heimer IBM TJ Watson Research Center ph: 914-945-3032 fax: 914-945-3434 robinlh@us.ibm.com http://www.coin-or.org John J Forrest/Watson/IBM@IBMUS@www-124.southbury.usf.ibm.com on 01/29/2003 08:55:55 AM Sent by: coin-contest-admin@www-124.southbury.usf.ibm.com To: coin-contest@www-124.southbury.usf.ibm.com cc: Subject: [Coin-contest] Cut generators etc As working with cut generators is an obvious way to enter this contest, I thought I would make some remarks on the current state of the generators and point out some of their defects. Fixing defects will definitely get bonus points from me. In this area it is very easy to make mistakes - normally a plus is used instead of a minus or some such. This has one of two results: 1) Illegal cuts are generated - often leading to better run times! The way to find these is to switch on the cut debugging tool in OsiRowCutDebugger which can recognize a problem, plug in an optimal solution and then complain if any cuts cut off this solution when they should not do so. I will try and increase the number of problems for which OsiRowCutDebugger.cpp knows the solution - if anyone has solutions already please send them to me. 2) Much harder to find are the cases where the cuts are weakened. Personally, I would think that fixing such a bug in existing generators can be as useful and challenging (and should recieve as much credit in the contest) as creating a new (and possibly buggy) cut generator. One good way of tracking down such bugs is to see if two equivalent problems give same cuts e.g. turn a <= row into a >= row and switch signs. The existing cut generators are: CglGomory This is fairly well tested. There can be problems of accuracy with long cuts, but that is the nature of the beast. There may still be negative bugs and I may put in one minor improvement to do with implicit integer slacks. CglKnapsackCover Again this is fairly well tested. It currently contains alternate methods for finding covers (greedy, heuristic, exact) and alternate methods for lifting (sequential, simulataneous). Additional cover finding and lifting ideas could be put in, especially those that take advantage of other problem information such as cliques would be a good area for coding. CglLiftAndProject There are a whole cadre of lift-and-project cuts using different norms This cut generator is an implementation of only one, the most basic one, what is called "Norm1" in the lift-and-project literature and does not make use of all the published lifting results. It assumes that the user only invokes it when appropriate. Much could be done here. This is not very well tested and should be made to fail gracefully when such cuts are not applicable. CglOddHole This works - sort of. I don't think it has any bugs which create false cuts but I am fairly sure it has bugs which prevent it from creating cuts, I found a stupid one just yesterday. A complete re-write could be the best way forward. CglProbing Probing (changing a bound on an integer variable and seeing what happens is normally thought of as preprocessing, and not as a cut generator, however if a continuous variable goes to a bound then you may be able to get a disaggregation cut and if a constraint goes slack when a variable is fixed you may be able to strengthen a coefficient in that constraint, This is fairly solid. It may not do as much as it should. It can fix variables and with the correct options do coefficient strengthening and disaggregation. If there's any preprocessing capability/information that would be useful for you to have for your own work, I would be glad to hear requests. For coefficient strengthening it produces a new cut with the strengthened coefficient (as opposed to actually changing the coefficient in the matrix). At the root node it might be useful to allow it to replace the constraint -. I may re-work cuts to make that easier. CglSimpleRounding This was designed as an example and I think will always be dominated by other cuts. It would be interesting to switch it on and see if it does produce any cuts not generated by other generators. The question of how to avoid duplication of cuts and so on is also interesting. I will be working on making these generators faster by preselecting promising rows and by decreasing the frequency of trying some generators. .There is some crude coding in Simple Branch and Bound, but it needs improvement. - this should be done as modifications to SbbCutGenerator. Is there any extra functionality you would like to have..? Now over to you Robin to discuss possible new cut generators. John Forrest _______________________________________________ Coin-contest mailing list Coin-contest@www-124.ibm.com http://www-124.ibm.com/developerworks/oss/mailman/listinfo/coin-contest From nihua at gwu.edu Tue Feb 11 15:33:04 2003 From: nihua at gwu.edu (NiHua) Date: Wed Nov 24 00:04:11 2004 Subject: [Coin-contest] Installation Problems Message-ID: <3E4D4F86@webmaillz.gwu.edu> Hello all, I was trying to install SBB under my Cygwin. It gives me errors and refuse to continue. Please see the results from make in the end of the email. Also in the FAQ, it says that SBB should work with MS VC++ 6.0. Is there any instruction on that? Thanks in advance. Hua $ make (cd /home/nihua/COIN/Coin && make install) make[1]: Entering directory `/home/nihua/COIN/Coin' /home/nihua/COIN/Makefiles/Makefile.CYGWIN:29: "Shared libs are not (yet!) sup rted on CYGWIN" make -f /home/nihua/COIN/Makefiles/Makefile.lib install make[2]: Entering directory `/home/nihua/COIN/Coin' Creating dependency CoinWarmStartBasis.d Creating dependency CoinShallowPackedVector.d Creating dependency CoinPackedVectorBase.d Creating dependency CoinPackedVector.d Creating dependency CoinPackedMatrix.d Creating dependency CoinMpsIO.d Creating dependency CoinMessageHandler.d Creating dependency CoinMessage.d Creating dependency CoinIndexedVector.d Creating dependency CoinFactorization4.d Creating dependency CoinFactorization3.d Creating dependency CoinFactorization2.d Creating dependency CoinFactorization1.d make[2]: Leaving directory `/home/nihua/COIN/Coin' make[2]: Entering directory `/home/nihua/COIN/Coin' Compiling CoinFactorization1.cpp Compiling CoinFactorization2.cpp Compiling CoinFactorization3.cpp Compiling CoinFactorization4.cpp Compiling CoinIndexedVector.cpp Compiling CoinMessage.cpp Compiling CoinMessageHandler.cpp Compiling CoinMpsIO.cpp Compiling CoinPackedMatrix.cpp Compiling CoinPackedVector.cpp Compiling CoinPackedVectorBase.cpp Compiling CoinShallowPackedVector.cpp Compiling CoinWarmStartBasis.cpp Creating library libCoin-O3.a Installing include files... Installing libraries... cp: setting permissions for `/home/nihua/COIN/lib/libCoin-O3.a': No such file directory make[2]: *** [/home/nihua/COIN/lib/libCoin-O3.a] Error 1 make[2]: *** Deleting file `/home/nihua/COIN/lib/libCoin-O3.a' make[2]: Leaving directory `/home/nihua/COIN/Coin' make[1]: *** [install] Error 2 make[1]: Leaving directory `/home/nihua/COIN/Coin' make: *** [libdepend] Error 2 From jpfasano at us.ibm.com Tue Feb 11 19:40:32 2003 From: jpfasano at us.ibm.com (JP Fasano) Date: Wed Nov 24 00:04:11 2004 Subject: [Coin-contest] Installation Problems Message-ID: Hua, The MS VC++ V 6.0 build process is not as well supported because it does not use gnu makefiles. (It would be great if someone did the work to have gnu make in cygwin compile the library using the MS VC++ compiler). If you "cvs checkout" COIN/Win you will find a coin.dsw and *.dsp files for building many COIN components on windows (including sbb and clp). See the file COIN/Win/readme.txt But, be warned that the *.dsp files can readily go out of date as new *.cpp files are added to existing projects. (The makefiles get updated, but the *.dsp files don't always). I have just updated the *.dsp files and the copies in cvs are now working for me. JP Fasano jpfasano@us.ibm.com (914)945-1324 (tie line 862-1324) COIN www.coin-or.org |---------+------------------------------------------------> | | NiHua | | | Sent by: | | | coin-contest-admin@www-124.southbury.| | | usf.ibm.com | | | | | | | | | 02/11/2003 03:33 PM | | | | |---------+------------------------------------------------> >----------------------------------------------------------------------------------------------| | | | To: coin-contest@www-124.southbury.usf.ibm.com | | cc: | | Subject: [Coin-contest] Installation Problems | | | >----------------------------------------------------------------------------------------------| Hello all, I was trying to install SBB under my Cygwin. It gives me errors and refuse to continue. Please see the results from make in the end of the email. Also in the FAQ, it says that SBB should work with MS VC++ 6.0. Is there any instruction on that? Thanks in advance. Hua $ make (cd /home/nihua/COIN/Coin && make install) make[1]: Entering directory `/home/nihua/COIN/Coin' /home/nihua/COIN/Makefiles/Makefile.CYGWIN:29: "Shared libs are not (yet!) sup rted on CYGWIN" make -f /home/nihua/COIN/Makefiles/Makefile.lib install make[2]: Entering directory `/home/nihua/COIN/Coin' Creating dependency CoinWarmStartBasis.d Creating dependency CoinShallowPackedVector.d Creating dependency CoinPackedVectorBase.d Creating dependency CoinPackedVector.d Creating dependency CoinPackedMatrix.d Creating dependency CoinMpsIO.d Creating dependency CoinMessageHandler.d Creating dependency CoinMessage.d Creating dependency CoinIndexedVector.d Creating dependency CoinFactorization4.d Creating dependency CoinFactorization3.d Creating dependency CoinFactorization2.d Creating dependency CoinFactorization1.d make[2]: Leaving directory `/home/nihua/COIN/Coin' make[2]: Entering directory `/home/nihua/COIN/Coin' Compiling CoinFactorization1.cpp Compiling CoinFactorization2.cpp Compiling CoinFactorization3.cpp Compiling CoinFactorization4.cpp Compiling CoinIndexedVector.cpp Compiling CoinMessage.cpp Compiling CoinMessageHandler.cpp Compiling CoinMpsIO.cpp Compiling CoinPackedMatrix.cpp Compiling CoinPackedVector.cpp Compiling CoinPackedVectorBase.cpp Compiling CoinShallowPackedVector.cpp Compiling CoinWarmStartBasis.cpp Creating library libCoin-O3.a Installing include files... Installing libraries... cp: setting permissions for `/home/nihua/COIN/lib/libCoin-O3.a': No such file directory make[2]: *** [/home/nihua/COIN/lib/libCoin-O3.a] Error 1 make[2]: *** Deleting file `/home/nihua/COIN/lib/libCoin-O3.a' make[2]: Leaving directory `/home/nihua/COIN/Coin' make[1]: *** [install] Error 2 make[1]: Leaving directory `/home/nihua/COIN/Coin' make: *** [libdepend] Error 2 _______________________________________________ Coin-contest mailing list Coin-contest@www-124.ibm.com http://www-124.ibm.com/developerworks/oss/mailman/listinfo/coin-contest From jjforre at us.ibm.com Sun Feb 16 16:46:44 2003 From: jjforre at us.ibm.com (John J Forrest) Date: Wed Nov 24 00:04:11 2004 Subject: [Coin-contest] Is Sbb stable enough to start work? Message-ID: I was asked if Sbb was stable enough to start using it. I did make a mess of updating Clp which broke everything but it all looks okay now. I will not be changing Sbb much now. Future plans include: a) Fixing bugs b) Improving Clp c) The only Sbb related change will be that I intend to add a row indicator to row cuts, which if set will indicate that that cut can be used to replace the indicated row rather than just be added as a cut. This should improve efficiency. There are some areas which have not been thoroughly tested. These include - a) Global cuts. Obviously ones added at root are global, the default for others is local (and descendants). This can be changed by user but this feature has not been thoroughly tested. If anyone plans to use this feature, make sure I know ahead of time. b) Cuts when a node is infeasible. This was for generating global cuts and is indicated when the cut generator is added to model. Again please inform me if you are going to be using this e.g. bender's cuts. John Forrest