[Coin-osi-devel] row & column names, anyone?

Lou Hafer lou at cs.sfu.ca
Tue Feb 6 19:01:17 EST 2007


Folks,

	As I work on cbc-generic (cbc for generic OSI solvers), I've reached the
point where row and column names are next on my list of things to do.  Far and
away the most sensible thing (from where I sit, anyway :-) is to put this
capability into OsiSolverInterface.  Where problem import/construction does not
provide names, it's trivial to construct something (rowNNN, colNNN, or similar).

	Does anyone object?
	
	If there are no objections, I'll likely set up an integer parameter 
along the following lines, with necessary support functions (suggestions 
welcome):

  0: No names:  No static name information is retained.  Attempts to set a
     row/col name are quietly ignored.  Requests for the name of an individual
     row/col always return rowNNN/colNNN.  Requests for vectors of names
     return null.
     
  The notion here is that you can be sure a request for an individual name will
  always generate a string (makes it easier to do debug messages).

  1: Client names plus lazy generation:  Row/column name information supplied by
     the client (via mps, gmpl, or explicit set row/col name) is retained.
     Requests for the name of an individual row/col name return the name
     supplied by the client or rowNNN/colNNN.  Requests for arrays of names
     return a reference to a vector sized to accommodate the largest index for
     which the client has supplied a name. The vector may contain null entries.

  So, if you read in an mps problem, then add a bunch of cuts, but supply no
  names, if you ask for the vector of row names, it'll be the size of the
  original problem. If you assign a name to the 5th cut, you'll get a vector
  with entries up to the 5th cut, and null entries for cuts 1 -- 4.

  2: As 1, but names are aggressively generated as rows/columns are added, if
     not supplied by the client. Vectors of row or column names will always be
     the size of the current constraint system and will contain no null entries.

For ease of coding, names will be std::string, arrays of names 
std::vector<std::string>. I'll lay on a reasonable set of access functions to
set/get row and column name arrays and individual row and column names.

At least in the first cut, this won't cope with major transformations (pre/post
processing, presolve, etc.). May come later if it looks straightforward.

							Lou




More information about the Osi mailing list