[Coin-discuss] re: Preserving row and column names using readLP & OsiSolverInterface
John J Forrest
jjforre at us.ibm.com
Wed Feb 1 10:06:53 EST 2006
James,
I was not paying attention as I saw readLp and thought - that is nothing
to do with Clp/OsiClp.
I will put readLp and writeLp into OsiClp.
John Forrest
"James Gibbons" <James.Gibbons at nottingham.ac.uk>
Sent by: coin-discuss-bounces at list.coin-or.org
02/01/2006 09:27 AM
Please respond to
Discussions about open source software for Operations Research
<coin-discuss at list.coin-or.org>
To
<coin-discuss at list.coin-or.org>
cc
Subject
[Coin-discuss] re: Preserving row and column names using readLP &
OsiSolverInterface
Dear All,
Replying to myself about previous message (text at end). Investigating
further I don't think the OsiSolverInterface::readLp function, inherited
by OsiClpSolverInterface copies the neames into the Solver object. I've
fixed this problem for me locally by adding the following function to
OsiClpSolverInterface.cpp (and a corresponding declaration in
OsiClpSolverInterface.hpp). the function is adapted from
OsiSolverInterface::readLp and OsiClpSolverInterface::readMps. I guess
there maybe a more elegant way of doing this as the message handler stuff
doesn't work and CoinLpIO::readLp doesn't return the number of errors. Is
there any chane of getting this or an improved version included in the
code base?
Thanks,
James
int
OsiClpSolverInterface::readLp(const char * filename, const double epsilon)
{
// Get rid of integer stuff
delete [] integerInformation_;
integerInformation_=NULL;
CoinLpIO m;
m.setInfinity(getInfinity());
//m.passInMessageHandler(modelPtr_->messageHandler());
//*m.messagesPointer()=modelPtr_->coinMessages();
//handler_->message(COIN_SOLVER_MPS,messages_)
// <<m.getProblemName()<< numberErrors <<CoinMessageEol;
int numberErrors = 0;
m.readLp(filename, epsilon);
if (!numberErrors) {
// set objective function offest
setDblParam(OsiObjOffset, 0);
// set problem name
setStrParam(OsiProbName, m.getProblemName());
// no errors
loadProblem(*m.getMatrixByCol(),m.getColLower(),m.getColUpper(),
m.getObjCoefficients(),m.getRowSense(),m.getRightHandSide(),
m.getRowRange());
const char *integer = m.integerColumns();
int nCols = m.getNumCols();
int nRows = m.getNumRows();
if (integer) {
int i, n = 0;
int *index = new int [nCols];
for (i=0; i<nCols; i++) {
if (integer[i]) {
index[n++] = i;
}
}
setInteger(index,n);
delete [] index;
}
// Always keep names
int iRow;
std::vector<std::string> rowNames = std::vector<std::string> ();
std::vector<std::string> columnNames = std::vector<std::string> ();
rowNames.reserve(nRows);
for (iRow=0;iRow<nRows;iRow++) {
const char * name = m.rowName(iRow);
rowNames.push_back(name);
}
int iColumn;
columnNames.reserve(nCols);
for (iColumn=0;iColumn<nCols;iColumn++) {
const char * name =
m.columnName(iColumn);
columnNames.push_back(name);
}
modelPtr_->copyNames(rowNames,columnNames);
}
return numberErrors;
Dear all,
I am trying to use the Clp and Cbc solvers to solve a problem generated by
XpressMP Mosel. I have been able to read and solve the problem as a .lp
file but not using a .mps file. (I think Xpress mps files might have a
non-standard extension to the format?).
What I can't work out how to do is too keep the row and column names from
the original problem. A simple example:
OsiClpSolverInterface solver0;
std::string fn = "test2.lp";
solver0.readLp(fn.c_str());
int ncols = solver0.getNumCols();
for(int i=0;i<ncols;i++) {
std::cout<<solver0.getColName(i)<<"\n";}
This outputs the column names as C0000001 etc. As there is no guarantee
about what order Mosel generates the matrix in I really need access to the
names. I've tried recompiling with LPIO_DEBUG defined in the CoinLPIO.cpp
file and the output from this suggests that readLp is reading in the
problem names correctly. So am I missing something obvious or doing
something wrong?
Thanks,
James
This message has been checked for viruses but the contents of an
attachment
may still contain software viruses, which could damage your computer
system:
you are advised to perform your own checks. Email communications with the
University of Nottingham may be monitored as permitted by UK legislation.
_______________________________________________
Coin-discuss mailing list
Coin-discuss at list.coin-or.org
http://list.coin-or.org/mailman/listinfo/coin-discuss
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/coin-discuss/attachments/20060201/9f96ea84/attachment.html>
More information about the Coin-discuss
mailing list