[Osi-managers] Changes to Osi for dual rays

Lou Hafer lou at cs.sfu.ca
Fri Aug 13 16:48:53 EDT 2010


Folks,

	In case you haven't been following the main osi list, you should be
aware of the following changes:

  * The signature of getDualRays has been changed in Osi/trunk to include a
    boolean to specify whether the returned rays should include only the row
    components or both the row and column components.
    
    Old signature: getDualRays(int maxRays)
    New signature: getDualRays(int maxRays, bool fullRay=false)

  * A rigourous test method for getDualRays has been added to the Osi common
    unit test which performs the algebraic test rb < 0 and rA >= 0. The ability
    to return the column components of the ray was needed in order for the
    math to work in a normal problem with implicit bounds.
    
Users will see no difference because the new parameter defaults to false.

That's not true for developers.  This change broke the compile of all OsiXXX
because getDualRays is a pure virtual method that must be implemented by an
OsiXXX.  To give everyone time to make changes (should you want to), the
getDualRays method was tweaked in every OsiXXX that implements it.  The new
parameter was added, along with code that will throw an exception if getDualRays
is ever called with fullRay = true.

The test method first tries for getDualRays(n,true) using a typical infeasible
problem (galenet).  If the call throws, it tries for getDualRays(n,false) with a
reformulated version of galenet that converts all implicit bounds to explicit
constraints (so the math still works).  If the call throws, it concludes that
getDualRays is unimplemented.  Lack of implementation is a warning, but not an
error.  Returning an incorrect ray is an error.

        Let me know if you find any bugs in the test.  I'm fairly certain it
does not properly handle the case where a range constraint is tight against the
lower bound (hence the logical is nonbasic against a nonzero upper bound) and
the corresponding ray component is nonzero.  A test example where the ray
component in question makes the difference between success and failure would be
extremely helpful.

							Lou



More information about the Osi-managers mailing list